3

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

select * from table
order by col1 * col2 - col3

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

谁能明确地说mysql是否每行计算一次这些值并在排序完成时临时存储它们,或者是否在进行比较时重新计算这些值(可能是1-n次)?

我已标记此 mysql,但我欢迎有关/包括其他流行数据库的评论/答案

4

2 回答 2

1

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

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

于 2012-08-14T17:12:38.473 回答
0

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

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

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

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

于 2012-08-13T12:55:47.670 回答