当我在另一个post中阅读查询时,它偶然发现了我。
例如,以以下查询为例(忽略排序的非实际使用):
SELECT
*
FROM Members
ORDER BY (TIMESTAMPDIFF(FRAC_SECOND, DateCreated , SYSDATE()))假设“成员”表有一个巨大的行计数(或者查询非常复杂,可以在至少十几毫秒内执行)。mySQL或其他主流DB引擎如何评估"ORDER BY“中的"SYSDATE()”?
假设查询耗时半秒钟,"SYSDATE“的微秒(FRAC_SECOND)会更改1000×1000×0.5 =50万次。
我的问题是:
更新:
我最初的文章使用NOW作为动态值的示例,它现在是SYSDATE
发布于 2009-11-22 01:06:22
NOW()返回一个常数时间,该时间指示语句开始执行的时间。(在存储的函数或触发器中,NOW()返回函数或触发语句开始执行的时间。)这与SYSDATE()的行为不同,SYSDATE()返回MySQL 5.0.12时的确切执行时间。
http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_now
换句话说,在执行语句时只执行一次。但是,如果要在每次执行时获得时间,则应使用SYSDATE
从
5.0.12开始,SYSDATE()返回它执行的时间。这与目前()的行为不同,后者返回指示语句开始执行的时间的常数时间。(在存储的函数或触发器中,NOW()返回函数或触发语句开始执行的时间。)
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将考虑时间戳的第一个评估值或最后一个值。不管怎么说,我想通过执行这个-你每次都会得到一个随机的顺序。也许这里有比我更好的专家能回答得更好。
https://stackoverflow.com/questions/1777389
复制相似问题