考虑两个 SQL 查询
select a+b absum from my_table order by a+b;
select absum from (select a+b absum from my_table) order by absum;
性能上有什么区别吗? 我想知道 SQL 如何执行查询:它会计算 a+b 一次还是两次?有什么提高性能的技巧吗?
最佳答案
首先,让我指出查看解释输出对于理解这些事情非常重要。但是,它只能回答特定查询的问题,而不能回答一般情况——优化器可能会根据其他因素选择不同的执行查询的方式。
在 MySQL 中——而且几乎只在 MySQL 中——性能存在差异,至少在 5.7 之前是这样。
最大的原因是MySQL将子查询具体化,然后进行排序。在这种情况下,物化的开销不是很大,因为排序将主导性能。
在某些情况下,性能会更高——有时物化会阻止使用索引和分区。
然而在MySQL 5.7中,优化器引入了“合并”,这是处理子查询的另一种方法。此方法允许编译器忽略子查询——并忽略额外的具体化。
这些概念在 documentation 中进行了解释。 ;如果您熟悉数据库编译器/优化器的功能,它确实会有所帮助。
关于mysql - SQL select查询顺序通过添加两个字段表现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48717766/