Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mySQL如何处理ORDER BY中的动态值_Sql_Mysql_Sql Order By - Fatal编程技术网

mySQL如何处理ORDER BY中的动态值

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次 我的问题是: 系统上的“系统日期”是否已固定 开始执行查询或将其删除 获取计算结果并更改为 执行进展如何 如果是后者,我能不能假设订购可

当我读另一本书的时候,它偶然发现了我

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

假设“Members”表的行数很大(或者查询非常复杂,至少需要十几毫秒才能执行)。mySQL或其他主流数据库引擎如何评估“
排序”中的“
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()))