mysql执行计划

什么是Mysql执行计划

执行计划是Mysql如何执行一条sql语句,包括sql查询顺序、是否使用索引、索引信息、查询命中率等信息。
基本语法

explain select ...

InnoDb引擎的执行计划内容

id:由一组数字组成,表示一个查询中各个子查询的执行顺序;

id相同执行顺序由上之下
id不同,id值越大优先级越高,越先被执行
id为null时表示一个结果集,不需要使用它查询,常出现在包含union等查询语句中

selectType:表示查询中每个select字句的类型

SIMPLE:表示此查询不包含union查询或子查询
PRIMARY:表示此查询是最外层的查询(包含子查询)
SUBQUERY:子查询中的第一个select
UNION:表示此查询时union的第二或随后的查询
....

table: 表示该语句查询的表

type:优化sql的重要字段,也是我们判断sql性能和优化程度重要指标。他的取值范围:

1、const:通过索引一次命中,匹配一行数据
2、system:表中只有一行记录,相当于系统表
3、eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配
4、ref:非唯一性索引扫描,返回匹配某个值的所有
5、range:指检索给定范围的行,使用一个索引来选择行,一般用于between、<、>
6、index:指遍历索引树
7、all:表示全表扫描。
执行效率:all<index<range<ref<eq_ref<const<system

possible_keys:可能使用的索引,不一定使用。查询涉及到的字段上若存在索引,则该索引将被列出来。

key:显示mysql查询中实际使用的索引,若没有使用索引,结果为null

key_len :索引长度

ref:命中索引字段名,走常量打印const

rows:mysql查询查询优化器根据统计信息估算该sql返回结果集需要扫描读取的行数,这个值相当重要,索引优化之后,扫描读取的行数越多,说明索引设置不对,或者字段传入的类型之类的问题,说明需要进行优化

filtered:返回结果的行数占需要读取的行(rows)的百分比,百分比越高,说明需要查询到数据越准确。

extra

1、using filesort:表示mysql对结果集进行外部排序,不能通过索引顺序达到排序效果。一般有using_filesort都建议优化去掉,因为这样的查询cpu资源消耗大,延时长。
2、using index:覆盖索引扫描,表示查询在索引树中就可查找到所需数据,不用扫描表数据文件,往往说明性能不错
3、using temporary:查询有使用临时表,一般出现于排序,分组和多表join的情况,查询效率不高,建议优化。
4、using where:sql使用了where过滤,效率较高。

posted @ 2021-05-24 10:00  刘指导  阅读(104)  评论(0编辑  收藏  举报