MYSQL分析执行计划

当一个SQL执行缓慢时,你就可以查看SQL的执行计划来分析,SQL慢的原因。

SQL执行计划一般显示如下:

几个重要的指标,我们来说明一下

select_type
查询的方式,数据读取操作的操作类型、查询的类型,主要是用于区别普通查询、联合查询、子查询等的复杂查询。
主要有以下几类:
SIMPLE:简单的select查询,查询中不包含嵌套、UNION或子查询
PRIMARY:查询中若包含复杂的子查询部分,最外层查询则被标记为:PRIMARY
SUBQUERY:在SELECT或WHERE列表中包含了子查询
DERIVED:在FROM列表中包含的子查询被标记为DERIVED
UNION:若SQL中包含UNION,第二个SELECT出现在UNION之后,则被标记为UNION
UNION RESULT:从UNION表获取结果的SELECT

table
查询时的表名称

type
表连接的类型
eq_ref:join 查询过程中,关联条件为主键或者唯一索引,出来的行数不止一行。eq_ref是一种性能非常好的 join 操作。
ref:非聚集索引的常量查询
fulltext:查询的过程中,使用到了 fulltext 索引

key
使用到的索引,实际使用的索引。

key_len
使用到索引的长度。

ref
谓词的关联信息
当 join type 为 const、eq_ref 或者 ref 时,谓词的关联信息。

rows
扫描的行数,该表格扫描到的行数。

filtered
实际显示行数占扫描rows的比例。

extra
特性使用
Using index:使用到索引
Using index conditio:使用到索引过滤
Using MRR:使用到索引内部排序
Using where:使用到where条件
Using temporary:使用到临时表
Using filesort:无法利用索引来完成的排序