别名是否分配功能值?
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 表达式恰好与计算字段之一匹配,并且可以通过不再对其进行评估来加快查询速度,那么数据库可能足够聪明,可以注意到这一点。
如果您关心性能,请尝试两者并比较执行时间。我敢打赌你肯定分不出来。
在 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 表达式恰好与计算字段之一匹配,并且可以通过不再对其进行评估来加快查询速度,那么数据库可能足够聪明,可以注意到这一点。
如果您关心性能,请尝试两者并比较执行时间。我敢打赌你肯定分不出来。