SQL通过添加两个字段性能来选择查询顺序

时间:2018-02-10 06:01:36

标签: mysql sql

考虑两个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如何执行查询:它会计算一次或两次+ b吗?是否有提高性能的技巧?

1 个答案:

答案 0 :(得分:1)

首先,我要指出,查看解释输出对于理解这些事情非常重要。但是,它只能针对特定查询回答问题,而不是一般情况下 - 优化程序可能会根据其他因素选择不同的执行查询的方式。

在MySQL中 - 几乎只在MySQL中 - 性能存在差异,至少在5.7之前。

最大的原因是MySQL实现了子查询,然后进行排序。在这种情况下,实现的开销不是很大,因为排序将主导性能。

在某些情况下,性能会更高 - 有时实现会阻止使用索引和分区。

然而在MySQL 5.7中,优化器引入了“合并”,这是处理子查询的另一种方法。此方法允许编译器忽略子查询 - 并忽略其他实现。

documentation中解释了这些概念 ;如果您对数据库编译器/优化器的作用有所了解,它会有所帮助。