在SELECT和WHERE子句中优化存储的函数调用

Sta*_*tan 8 mysql stored-functions

我有一个SQL查询具有以下结构:

SELECT *, storedfunc(param, table.field) as f 
FROM table 
WHERE storedfunc(param, table.field) < value 
ORDER BY storedfunc(param, table.field);
Run Code Online (Sandbox Code Playgroud)

有没有办法优化这个消除几个函数调用?或者MySQL是否在幕后执行此类优化?事实上,该函数被声明为确定性的.

我还需要提一下,函数参数部分来自选定表的列.我稍微改变了这个例子以反映这一点.

ype*_*eᵀᴹ 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 ;
Run Code Online (Sandbox Code Playgroud)

在MySQL中,您甚至可以这样写(警告:不是标准的SQL语法):

SELECT *, storedfunc(param, table.column) AS f 
FROM table 
HAVING f < value 
ORDER BY f ;
Run Code Online (Sandbox Code Playgroud)