mysql执行计划字段解释

id
id值有相同,又有不同:id值越大越优先;id值相同,从上往下顺序执行

select_type 查询类型
PRIMARY:包含子查询SQL中的主查询(最外层)
SUBQUERY:包含子查询SQL中的子查询(非最外层)
simple:简单查询(不包含子查询、union)
derived:衍生查询(使用到了临时表)
a.在from子查询中只有一张表
b.在from子查询中,如果有table1 union table2,则table1就是derived,table2就是union
union:上例
union_result:告知那些表存在union查询

tpye 索引类型
system>const>eq_ref>ref>range>index>all 要对type进行优化的前提:有索引
其中:system,const只是理想情况 ; 实际能达到:ref>range
system:只有一条数据的系统表;或衍生表只有一条数据的主查询
const:仅仅能查到一条数据的SQL,用于primary key或unique key
eq_ref:唯一性索引,对于每个索引键的查询,返回匹配唯一行数据(有且只有1个,不能多,不能为0)常见于主键索引和唯一索引
ref:非唯一性索引,对于每个索引键的查询,返回匹配的所有行(0,多)
range:检索指定范围的行,where后面是一个范围查询(between,in,>,<,>=,<=,in有时会失效变为无索引all)
index:查询全部索引中的数据
all:查询全部表中的数据

结论:
system/const:结果只有一条数据
eq_ref:结果多条;但是每条数据是唯一的
ref:结果多条;但是每条数据是0条或多条

possible_keys 可能用到的索引,是一种预测,不准

key 实际使用的索引

key_len 索引的长度,用于判断复合索引是否被完全使用(utf8中一个字符占3个字节,如果索引字段可以为null,则会用一个字节用于标识,用2个字节标识可变长度)

ref 指明当前表所参照的字段(常量为const)

rows 被索引优化查询的数据行数(实际通过索引查询到的数据行数)

extra
using filesort:消耗性能大,需要“额外”的排序(查询)
对于单索引,如果排序和查找是同一个字段,则不会出现using filesort。反之。
复合索引:不能跨列(最左前缀原则)。避免:where和order by按照复合索引的顺序使用,不要跨列或无序使用
using temporary:性能损耗大,用到了临时表。一般出现在group by语句中。已经有表了,但不适用,必须再来一张表。 避免:查询哪些列,就根据哪些列group by。
using index:性能提升,覆盖索引。不读取原文件,只从索引中获取数据(不需要回表查询)
如果用到了索引覆盖,会对possible_key和key造成影响:
如果没有where,则索引只出现在key中
如果有where,则索引出现在key和possible_key中
using where(需要回表查询)
impossible where:where子句永远为false
using join buffer:mysql引擎使用了连接缓存

你可能感兴趣的:(mysql)