当我在另一个post中阅读查询时,它偶然发现了我。
以以下查询为例(忽略排序的非实际用途):
SELECT
*
FROM Members
ORDER BY (TIMESTAMPDIFF(FRAC_SECOND, DateCreated , SYSDATE()))
假设“Members”表的行数很大(或者查询足够复杂,至少需要十几毫秒才能执行)。mySQL或其他主流数据库引擎如何评估“
SYSDATE()
”中的“ORDER BY
”?假设查询需要半秒,“SYSDATE”的微秒(
FRAC_SECOND
)更改1000 X 1000 X 0.5=50万次。我的问题是:
“SYSDATE”是否在
查询执行的开始
计算并更改为
执行进度?
如果是后者的话,我能假定订货可能会混乱吗?
更新:
我最初的帖子使用
NOW
作为动态值的例子,现在是SYSDATE
了 最佳答案
NOW()返回一个常数时间
指示
语句开始执行。(在
存储的函数或触发器,现在()
返回函数
或者触发语句开始
执行。)这与
SYSDATE()的行为,它返回
它执行的确切时间
MySQL5.0.12的。
http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_now
换句话说,当语句被执行时,它只执行一次。
但是,如果要获取每次执行时的时间,则应使用SYSDATE
从MySQL 5.0.12开始,SYSDATE()返回
它执行的时间。这个
与现在的行为不同(),
它返回一个常数时间
指示
语句开始执行。(在
存储的函数或触发器,现在()
返回函数
或者触发语句开始
执行。)
http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_sysdate
更新:
好吧,据我所知,Order by
将被执行或更好地说“使用”只有一次。因为每次执行TIMESTAMPDIFF(FRAC_SECOND, DateCreated , SYSDATE())
语句时SELECT
的值都会不同。因此,我认为(我再次认为)ORDER BY
将考虑timestampdiff的第一个计算值或最后一个计算值。不管怎样,我想通过执行这个-你每次都会得到一个随机的命令。也许这里有比我更好的专家能回答得更好。
关于sql - MySQL如何处理ORDER BY中的动态值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1777389/