mySQL如何处理ORDER BY中的动态值
当我读另一本书的时候,它偶然发现了我 以以下查询为例(忽略排序的非实际用途): 假设“Members”表的行数很大(或者查询非常复杂,至少需要十几毫秒才能执行)。mySQL或其他主流数据库引擎如何评估“mySQL如何处理ORDER BY中的动态值,sql,mysql,sql-order-by,Sql,Mysql,Sql Order By,当我读另一本书的时候,它偶然发现了我 以以下查询为例(忽略排序的非实际用途): 假设“Members”表的行数很大(或者查询非常复杂,至少需要十几毫秒才能执行)。mySQL或其他主流数据库引擎如何评估“按排序”中的“SYSDATE()” 假设查询需要半秒钟,“SYSDATE”的微秒(FRAC_second)变化1000 X 1000 X 0.5=500000次 我的问题是: 系统上的“系统日期”是否已固定 开始执行查询或将其删除 获取计算结果并更改为 执行进展如何 如果是后者,我能不能假设订购可
按
排序”中的“SYSDATE()
”
假设查询需要半秒钟,“SYSDATE”的微秒(FRAC_second
)变化1000 X 1000 X 0.5=500000次
我的问题是:
我最初的帖子使用
NOW
作为动态值的示例,它是SYSDATE
NOW
NOW()返回一个
指示发生故障的时间
语句开始执行。(一小时内)
存储函数或触发器,现在()
返回函数运行的时间
或者触发语句开始
执行。)这与
SYSDATE()的行为,返回
它执行为的确切时间
MySQL的5.0.12版本
换句话说,当语句执行时,它只执行一次。
但是,如果希望获得每次执行的时间,则应使用SYSDATE
从MySQL 5.0.12开始,SYSDATE()返回
它执行的时间。这
与当前的行为()不同,
它返回一个常数时间
指示发生故障的时间
语句开始执行。(一小时内)
存储函数或触发器,现在()
返回函数运行的时间
或者触发语句开始
执行。)
更新:嗯,据我所知,
Order by
将执行一次,或者说“使用”一次更好。因为每次执行SELECT
语句时,TIMESTAMPDIFF(FRAC_SECOND,DateCreated,SYSDATE())的值将不同。因此,我认为(再一次我想)<代码> >按< /Cord>将考虑TimeStimdiffi的第一个评估值或最后一个。不管怎样,我认为通过执行这个,你每次都会得到一个随机顺序。也许这里有比我更好的专家,他们可以回答得更好。啊,我明白了,好吧,让我稍微修改一下这个问题。顺便说一句,这是很好的信息+1@Heavy字节:我用一个新的子问题修改了我的帖子。要不要再来一次?:)嗯,据我所知,Order by将被执行,或者更好的说法是“使用”一次。因为每次执行SELECT语句时,TIMESTAMPDIFF(FRAC_SECOND,DateCreated,SYSDATE())的值都会不同。因此,我认为(再一次我想)命令会考虑TimeStimdiffi的第一个评估值或最后一个。不管怎样,我认为通过执行这个,你每次都会得到一个随机顺序。也许这里有比我更好的专家可以回答得更好。希望你不介意我在你的答案后面附加了你的上述评论,我认为对读者来说它看起来更完整:P太糟糕了,我不能两次超过你:PSure,你对答案满意吗?我想了解它是如何工作的最好方法是实际测试它:)当在ORDER BY中使用时,SYSDATE只被评估一次是有意义的,否则你会有一个移动的目标,因为SYSDATE是确定性的。由于行为的不确定性,最好在查询中使用之前将日期值设置为一个变量。@OMG Ponies:根据Heavy Btyes的帖子,SYSDATE在执行过程中进行评估,而不是一次。你不这么认为吗?
SELECT
*
FROM Members
ORDER BY (TIMESTAMPDIFF(FRAC_SECOND, DateCreated , SYSDATE()))