别名是否分配功能值?

Does Aliases assign the Functions values?

PHP 中,我了解到调用函数的方式会影响性能,例如:

function SUM() {
    return 1+2+3+4;
}

如果我做了类似

的事情
print(SUM());
print(SUM());
print(SUM());

相当于做3次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)?还是分配了别名?

数据库究竟如何评估SQL是一个实现细节。假设计算值在执行期间存储在临时变量中的某处是相当安全的,但我们看不到。如果 ORDER BY 表达式恰好与计算字段之一匹配,并且可以通过不再对其进行评估来加快查询速度,那么数据库可能足够聪明,可以注意到这一点。

如果您关心性能,请尝试两者并比较执行时间。我敢打赌你肯定分不出来。