问题
I have an SQL query with the following structure:
SELECT *, storedfunc(param, table.field) as f
FROM table
WHERE storedfunc(param, table.field) < value
ORDER BY storedfunc(param, table.field);
Is there a way to optimize this eliminating several function calls? Or does MySQL perform such optimization behind the scene? In fact the function is declared as deterministic.
I need also to mention that the function params are partially from selected table's columns. I changed the example slightly to reflect this.
回答1:
Rewrite and test which one performs faster:
SELECT *, storedfunc(param, table.column) AS f
FROM table
WHERE storedfunc(param, table.column) < value
ORDER BY f ;
SELECT *
FROM
( SELECT *, storedfunc(param, table.column) AS f
FROM table
) AS tmp
WHERE f < value
ORDER BY f ;
In MySQL, you can even write like this (warning: not standard SQL syntax):
SELECT *, storedfunc(param, table.column) AS f
FROM table
HAVING f < value
ORDER BY f ;
来源:https://stackoverflow.com/questions/10977607/optimizing-a-stored-function-call-in-select-and-where-clauses