MySQL: row selection with minimum computed column value

The naive way to do this that comes to mind would be as follows:

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 ));

However, the "(SELECT name, levenshtein (name, parameter) as lev FROM my_table)" subquery, which is very expensive (huge table), is repeated twice, which seems terribly inefficient.

I can somehow write:

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);

But that does not work.

Is there an easy way to optimize this query for speed? Am I missing something obvious?

Should I rely on temporary tables? (trying to avoid this due to overhead / complexity as they don't seem suitable for very frequent / concurrent requests)

Any input from SQL ninjas is welcome;)

+5
3
select * from
(
SELECT * 
FROM `test`.`test`
)
as temp
where compute_total_price_single=(select min(compute_total_price_single))
;

, , , , :

SELECT name, lev FROM
    (SELECT name, levenshtein(name, *parameter*) as lev FROM my_table) as my_temp_table
WHERE 
lev = (SELECT MIN(lev));

MySQL 5.

+1
SELECT * FROM
(
    SELECT * 
    FROM `test`.`test`
) as temp
WHERE compute_total_price_single = (SELECT MIN(compute_total_price_single));
0
SELECT name, min(levenshtein(name, *parameter)) as lev
FROM my_table
GROUP BY name;
-1
source

All Articles