文章目录
执行计划
-
所谓的执行计划就是
Mysql
如何执行一条Sql
语句,包括Sql
查询的顺序、是否使用索引、以及使用的索引信息等内容。不同版本的Mysql和不同的存储引擎执行计划不完全相同 -
语法
1. 基本 explain select ... 2. 变体,将执行计划"反编译"成SELECT语句,运行SHOW WARNINGS 可得到被MySQL优化器优化后的查询语句 explain EXTENDED SELECT ... 3. 用于分区表的EXPLAIN,在5.7之前默认不显示分区信息需要手动指明partitions explain partitions select ...
-
执行计划的局限
- EXPLAIN不会告诉你关于触发器、存储过程的信息或用户自定义函数对查询的影响情况
- EXPLAIN不考虑各种Cache
- EXPLAIN不能显示MySQL在执行查询时所作的优化工作
- 部分统计信息是估算的,并非精确值
- EXPALIN只能解释SELECT操作,其他操作要重写为SELECT后查看执行计划
列信息
id
- Query Optimizer 所选定的执行计划中查询的序列号,表示一个查询中各个子查询的执行顺序
- id相同执行顺序由上至下
- id不同,id值越大优先级越高,越先被执行
- id为
null
时表示一个结果集,不需要使用它查询,常出现在包含union
等查询语句中
select_type
-
select_type:所使用的查询类型,主要有以下这几种查询类型
值 描述 DEPENDENT SUBQUERY 子查询中内层的第一个SELECT,依赖于外部查询的结果集; DEPENDENT UNION 子查询中的UNION,且为UNION 中从第二个SELECT 开始的后面所有SELECT,同样依赖于外部查询的结果集; PRIMARY 子查询中的最外层查询,注意并不是主键查询 SIMPLE 除子查询或者UNION 之外的其他查询 SUBQUERY 子查询内层查询的第一个SELECT,结果不依赖于外部查询结果集 UNCACHEABLE SUBQUERY 结果集无法缓存的子查询 UNION UNION 语句中第二个SELECT 开始的后面所有SELECT,第一个SELECT 为PRIMARY