别名是否分配函数值?

时间:2018-03-10 23:49:57

标签: mysql query-performance

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)?或者它是否分配了别名?

1 个答案:

答案 0 :(得分:3)

数据库评估SQL的确切方式是实现细节。假设计算值在执行期间存储在临时变量中的某个位置是相当安全的,但我们无法看到它。如果ORDER BY表达式碰巧匹配其中一个计算字段,并且可以通过不再对其进行评估来加速查询,那么数据库可能只是足够聪明,可以注意到这一点。

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