首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mySQL如何处理有序范围内的动态值

问mySQL如何处理有序范围内的动态值
EN

Stack Overflow用户
提问于 2009-11-22 01:03:21
回答 1查看 537关注 0票数 1

当我在另一个post中阅读查询时,它偶然发现了我。

例如,以以下查询为例(忽略排序的非实际使用):

代码语言:javascript
复制
SELECT 
*
FROM Members 
ORDER BY (TIMESTAMPDIFF(FRAC_SECOND, DateCreated , SYSDATE()))

假设“成员”表有一个巨大的行计数(或者查询非常复杂,可以在至少十几毫秒内执行)。mySQL或其他主流DB引擎如何评估"ORDER BY“中的"SYSDATE()”?

假设查询耗时半秒钟,"SYSDATE“的微秒(FRAC_SECOND)会更改1000×1000×0.5 =50万次。

我的问题是:

  1. 是在查询执行开始时修复"SYSDATE“,还是在执行过程中对其进行评估和更改?
  2. 如果是后者,我是否可以假设排序可能会乱七八糟?

更新:

我最初的文章使用NOW作为动态值的示例,它现在是SYSDATE

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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将考虑时间戳的第一个评估值或最后一个值。不管怎么说,我想通过执行这个-你每次都会得到一个随机的顺序。也许这里有比我更好的专家能回答得更好。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1777389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档