9

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

SELECT *, storedfunc(param, table.field) as f 
FROM table 
WHERE storedfunc(param, table.field) < value 
ORDER BY storedfunc(param, table.field);

有没有办法优化这个消除几个函数调用?还是 MySQL 在幕后进行这样的优化?事实上,该函数被声明为确定性的。

我还需要提到函数参数部分来自选定表的列。我稍微更改了示例以反映这一点。

4

1 回答 1

9

重写并测试哪一个执行得更快:

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 ;
于 2012-06-11T09:52:18.710 回答