假设我们有一个按未选择的计算值排序的查询,例如:
select * from table
order by col1 * col2 - col3
在大多数语言的典型排序操作中,排序期间多次使用排序值是很常见的,因为给定记录与可能很多其他记录进行比较。有可能mysql有这样的实现。
如果mysql每行计算一次一次,并且在排序完成时临时存储它们,或者每当进行比较时重新计算值,那么任何人都可以说确定这可能是1-n次)?
我已经标记了这个mysql,但我欢迎关于/包括其他热门数据库的评论/答案
答案 0 :(得分:1)
答案是...... mysql每行执行一次计算。
由于缺乏可靠的答案,我运行了一个明确的test on sqlfiddle,它按照not deterministic
函数的结果进行排序(每次比较时都必须调用),该函数也记录在另一个表中被称为。它显示调用的次数=行数。
答案 1 :(得分:0)
我只是使用MySQL查询浏览器来解释一个查询,并对几列的计算进行排序,并且它说它使用了文件排序...所以看起来它会使用一个临时索引(计算一次)。 / p>
如果您有一个您想要测试的特定示例 - 您可以确保它为您做同样的事情。
以下是开发人员博客之一的链接,其中详细说明了按作业顺序: