在PHP
我已经了解到我如何称呼我所做的功能会影响性能,例如:
function SUM() {
return 1+2+3+4;
}
如果我做了类似
的事情print(SUM());
print(SUM());
print(SUM());
与执行print(1+2+3+4)
三次相同,必须计算1+2+3+4
,但如果我将其分配给变量,例如;
$value = SUM();
print($value);
print($value);
print($value);
与print(10)
一样,但value
只计算一次并分配给变量。
在SQL
我可以aliases
到列和计算,可以使用或不使用别名,例如:
SELECT (A+B+C+D)
FROM table
WHERE (A+B+C+D) > 0
ORDER BY (A+B+C+D)
不使用别名并使用(A+B+C+D)
两次,我想知道的是,如果此查询与
SELECT (A+B+C+D) AS value
FROM table
WHERE (A+B+C+D) > 0
ORDER BY value
在PHP
来电的同一方面。
value
是否会再次计算(A+B+C+D)
?或者它是否分配了别名?
答案 0 :(得分:3)
数据库评估SQL的确切方式是实现细节。假设计算值在执行期间存储在临时变量中的某个位置是相当安全的,但我们无法看到它。如果ORDER BY表达式碰巧匹配其中一个计算字段,并且可以通过不再对其进行评估来加速查询,那么数据库可能只是足够聪明,可以注意到这一点。
如果您关心性能,请尝试两者并比较执行时间。我打赌你不能分辨出来。