where子句中的计算列 - 性能

Rap*_*ger 24 mysql performance

因为你不能在MySQL的where子句中使用计算列,如下所示:

SELECT a,b,c,(a*b+c) AS d FROM table
WHERE d > n
ORDER by d
Run Code Online (Sandbox Code Playgroud)

你必须使用

SELECT a,b,c,(a*b+c) AS d FROM table
WHERE (a*b+c) > n
ORDER by d
Run Code Online (Sandbox Code Playgroud)

是计算(在那个例子中"(a*b + c)"每行执行一次还是两次?有没有办法让它更快?我觉得很奇怪,可以在列上进行ORDER而不是有一个WHERE-条款.

Bar*_*mar 51

您可以使用HAVING过滤计算列:

SELECT a,b,c,(a*b+c) AS d, n FROM table
HAVING d > n
ORDER by d
Run Code Online (Sandbox Code Playgroud)

请注意,您需要n在SELECT子句中包含此内容才能生效.

  • 仅供参考:似乎此解决方案仅适用于MySQL,也不适用于SQL Server. (4认同)
  • 太好了,谢谢!它在性能方面是否比在 WHERE 子句中重复公式更好/相等/更差?可读性当然更好:) (2认同)