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

2024-05-03

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

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

有没有办法优化它,消除多个函数调用?或者MySQL在幕后执行这样的优化吗?事实上,该函数被声明为确定性的。

我还需要提及的是,函数参数部分来自所选表的列。我稍微改变了这个例子来反映这一点。


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

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 ;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

优化 SELECT 和 WHERE 子句中的存储函数调用 的相关文章

随机推荐