我有一个具有以下结构的SQL查询:
SELECT *, storedfunc(param, table.field) as f
FROM table
WHERE storedfunc(param, table.field) < value
ORDER BY storedfunc(param, table.field);
有没有办法优化这个消除几个函数调用?或者MySQL是否在幕后执行此类优化?实际上,该函数被声明为确定性的。
我还需要提一下,函数参数部分来自选定表的列。我略微改变了这个例子以反映这一点。
答案 0 :(得分:8)
重写并测试哪一个表现得更快:
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 ;
在MySQL中,您甚至可以这样写(警告:不是标准的SQL 语法):
SELECT *, storedfunc(param, table.column) AS f
FROM table
HAVING f < value
ORDER BY f ;