where子句中的计算列 - 性能

时间:2013-04-17 19:33:59

标签: mysql performance

由于您不能在MySQL中的where子句中使用计算列,如下所示:

SELECT a,b,c,(a*b+c) AS d FROM table
WHERE d > n
ORDER by d

你必须使用

SELECT a,b,c,(a*b+c) AS d FROM table
WHERE (a*b+c) > n
ORDER by d

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

2 个答案:

答案 0 :(得分:47)

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

SELECT a,b,c,(a*b+c) AS d, n FROM table
HAVING d > n
ORDER by d

请注意,您需要在SELECT子句中包含n才能使其生效。

答案 1 :(得分:2)

你可以这样做:

SELECT a,b,c,d FROM 
(SELECT a,b,c,(a*b+c) AS d) AS tmp
WHERE d > n
ORDER BY d

但我不确定它可能带来的性能影响。