【问题标题】:Are calculated values used in ORDER BY ever recalculated during sorting?ORDER BY 中使用的计算值是否在排序期间重新计算过?
【发布时间】:2012-08-09 02:14:50
【问题描述】:

假设我们有一个按计算值排序的查询,该计算值被选中,例如:

select * from table
order by col1 * col2 - col3

在大多数语言的典型排序操作中,排序值在排序过程中被多次使用是很常见的,因为给定的记录会与可能的许多其他记录进行比较。 mysql有这样的实现是可能的。

如果 mysql 每行计算此类值 一次 并在排序完成时临时存储它们,或者在进行比较时重新计算值,任何人都可以说 明确 (可能是 1-n 次)?

我已经标记了这个 mysql,但我欢迎有关/包括其他流行数据库的 cmets/answers

【问题讨论】:

    标签: mysql caching sorting sql-order-by


    【解决方案1】:

    答案是……mysql 每行执行一次计算一次

    由于缺乏可靠的答案,我运行了一个明确的test on sqlfiddle,它根据not deterministic 函数(每次比较时都必须调用它)的结果进行排序,该函数在被调用时也会记录在另一个表中。显示调用次数=行数。

    【讨论】:

      【解决方案2】:

      我刚刚使用 MySQL 查询浏览器解释了一个对几列计算进行排序的查询,它说它使用了文件排序......所以看起来它使用了一个临时索引(计算一次)。

      如果您有一个想要测试的特定示例 - 您可以确保它为您做同样的事情。

      这是一个开发人员博客的链接,其中详细介绍了 order by 的工作原理:

      http://s.petrunia.net/blog/?p=24

      【讨论】:

      • “它会出现”不是确定的(正如我的回答),但它很接近,因为你是唯一的其他回答者,你会得到奖励 :)
      猜你喜欢
      • 1970-01-01
      • 2017-11-02
      • 1970-01-01
      • 2018-11-29
      • 1970-01-01
      • 2015-01-08
      • 2020-01-14
      • 2016-12-09
      • 2019-03-01
      相关资源
      最近更新 更多