【发布时间】:2009-11-22 01:03:21
【问题描述】:
当我在另一个 post 中阅读查询时,它偶然发现了我。
以下面的查询为例(忽略排序的非实际使用):
SELECT
*
FROM Members
ORDER BY (TIMESTAMPDIFF(FRAC_SECOND, DateCreated , SYSDATE()))
假设“成员”表的行数很大(或者查询足够复杂,至少需要十几毫秒才能执行)。 mySQL或其他主流数据库引擎如何评估“ORDER BY”中的“SYSDATE()”?
假设查询需要半秒,“SYSDATE”的微秒 (FRAC_SECOND) 变化 1000 X 1000 X 0.5 = 500 000 次。
我的问题是:
- “SYSDATE”是否固定在 查询执行的开始或它 被评估并随着 执行进度?
- 如果是后者,我可以假设顺序可能混乱吗?
更新:
我的原帖使用NOW作为动态值的例子,现在是SYSDATE
【问题讨论】:
-
有意义的是,当在 ORDER BY 中使用时,SYSDATE 只评估一次,否则您将有一个移动目标,因为 SYSDATE 是确定性的。由于行为的不确定性,最好在查询中使用之前将日期值设置为变量。
-
@OMG Ponies:根据 Heavy Btyes 的帖子,SYSDATE 在执行期间被评估,而不仅仅是一次。你不这么认为吗?
标签: sql mysql sql-order-by