Explain 用法
为什么要使用 explain?
explain 可以帮助我们分析 select 语句,让我们知道查询效率低下的原因,从而改进我们查询,
让查询优化器能够更好的工作。
MySQL 查询优化器是如何工作的
MySQL 查询优化器有几个目标,但是其中最主要的目标是尽可能地使用索引,并且使
用最严格的索引来消除尽可能多的数据行。最终目标是提交 SELECT 语句查找数据行,而不
是排除数据行。优化器试图排除数据行的原因在于它排除数据行的速度越快,那么找到与条
件匹配的数据行也就越快。如果能够首先进行最严格的测试,查询就可以执行地更快。
EXPLAIN 的每个输出行提供一个表的相关信息,并且每个行包括下面的列:
MySQL Query Optimizer 选定的执行计划中查
询的序列号。表示查询中执行 select 子句或
操作表的顺序,id 值越大优先级越高,越先
被执行。id 相同,执行顺序由上至下。
简单的 select 查询,不使用 union 及子查询
UNION 中的第二个或随后的 select 查询,不
依赖于外部查询的结果集
UNION 中的第二个或随后的 select 查询,依
赖于外部查询的结果集
子查询中的第一个 select 查询,不依赖于外
部查询的结果集
子查询中的第一个 select 查询,依赖于外部
查询的结果集
用于 from 子句里有子查询的情况。MySQL 会
递归执行这些子查询,把结果放在临时表里。
结果集不能被缓存的子查询,必须重新为外
层查询的每一行进行评估
UNION 中的第二个或随后的 select 查询,属
于不可缓存的子查询