想到的天真的方法是:
SELECT name, lev FROM
(SELECT name, levenshtein(name, *parameter*) as lev FROM my_table)
WHERE
lev = (SELECT MIN(lev) FROM
(SELECT name, levenshtein(name, *parameter*) as lev FROM my_table ));
然而,“(SELECT name, levenshtein(name, parameter ) as lev FROM my_table)”子查询非常昂贵(巨大的表)重复了两次,这似乎非常低效。
我以某种方式虽然你可以写:
SELECT name, lev FROM
(SELECT name, levenshtein(name, *parameter*) as lev FROM my_table) as my_temp_table
WHERE
lev = (SELECT MIN(lev) FROM my_temp_table);
但这似乎不起作用。
有没有一种干净的方法来优化该查询的速度?我错过了什么明显的东西吗?
我必须依赖临时表吗?(由于开销/复杂性而试图避免它,因为它们似乎不适合非常频繁/并发的查询)
来自 SQL ninjas 的任何输入将不胜感激;)