mysql - SQL select查询顺序通过添加两个字段表现

标签 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 如何执行查询:它会计算 a+b 一次还是两次?有什么提高性能的技巧吗?

最佳答案

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

在 MySQL 中——而且几乎只在 MySQL 中——性能存在差异,至少在 5.7 之前是这样。

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

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

然而在MySQL 5.7中,优化器引入了“合并”,这是处理子查询的另一种方法。此方法允许编译器忽略子查询——并忽略额外的具体化。

这些概念 documentation 中进行了解释。 ;如果您熟悉数据库编译器/优化器的功能,它确实会有所帮助。

关于mysql - SQL select查询顺序通过添加两个字段表现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48717766/

相关文章:

MySQL变量没有正确递增

mysql - 带有 INNER JOIN SELECT SUM 的 INSERT 语句

mysql根据当前项目选择相关项目

mysql - sql连接同一个表中的2行

php - pdo异常: to many connections

mysql - SQL查询问题

php - 用PHPExcel制作Excel文件,每列写两次

Mysql 子字符串使用 instr()

mysql - 如何在 MySQL 中进行递归 SELECT 查询?

mysql - SQL 文本搜索 - EXACT 在空格之前,LIKE 在搜索词之后