Наивный способ сделать это, который приходит на ум, будет следующим:
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;)