ORDER BY中使用的计算值是否在排序期间重新计算?

时间:2012-08-09 02:14:51

标签: mysql caching sorting sql-order-by

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

select * from table
order by col1 * col2 - col3

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

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

我已经标记了这个mysql,但我欢迎关于/包括其他热门数据库的评论/答案

2 个答案:

答案 0 :(得分:1)

答案是...... mysql每行执行一次计算。

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

答案 1 :(得分:0)

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

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

以下是开发人员博客之一的链接,其中详细说明了按作业顺序:

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