执行计划,就是一条SQL语句,在数据库中实际执行的时候,一步步的分别都做了什么。也就是我们用EXPLAIN分析一条SQL语句时展示出来的那些信息。
EXPLAIN命令是查看查询优化器是如何决定执行查询的主要方法,从它的查询结果中可以知道一个SQL语句每一步是如何执行的,都经历了些什么,分为哪几步,有没有用到索引,哪些字段用到了什么样的索引,是否有一些可优化的地方等,这些信息都是我们SQL优化的依据。
要使用·EXPLAIN,只需在查询中的SELECT关键字之前增加EXPLAIN。语法如下:
EXPLAIN + SELECT查询语句;
具体作用
- 表的读取顺序
- 数据读取操作的操作类型
- 哪些索引可以使用
- 哪些索引被实际使用
- 表之间的引用
- 每张表有多少行被优化器查询
输出各字段解释如下。更详细的信息请参考explain输出参数
- id:select查询序列号,id相同,执行顺序由上至下;id不同,id值越大优先级越高,越先被执行;
- select_type:查询数据的操作类型,有如下:
simple,简单查询,不包括子查询和union; primary,包含复杂的子查询,最外层查询标记为该值; subquery,在select活where中包含子查询,被标记为该值; derived,在from列表中包含的子查询被标记为改值,MySQL会递归这些子查询,将结果保存到临时表; union,第二个select出现在union之后,被标记为该值;union包含在from的子查询中,外层select被标记为derived; union result,从union表获取结果的select;
- table:显示该行数据是关于哪张表;
- partitions:匹配的分区;
- type:表的连接类型,其值、性能由高到底排列如下:
- system,表中只有一行记录,相当于系统表;
- const,通过索引一次命中,匹配一行数据;
- eq_ref,唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配,常用语主键或唯一索引扫描;
- ref,非唯一性索引扫描,返回匹配某个单独值的所有行,用于=、<或>操作符带索引的列;
- range,只检索给定范围的行,使用一个索引来选择行,一般用于between、<、>;
- index,只遍历索引树;
- all,全表扫描;
网友评论