Explain列详解
2021-07-08 17:13:28 0 举报
AI智能生成
Explain列详解
作者其他创作
大纲/内容
Explain详解
执行计划的列
id
id列的编号是select的序列号,有几个select就有几个id,并且id的顺序是按select出现的顺序增长的。id列越大执行优先级越高,id相同则从上往下执行,id为NULL最后执行
select_type
select_type表示对应行是简单还是复杂的查询
simple
简单查询。查询不包含子查询和union
primary
复杂查询中最外层的select
subquery
包含在select中的子查询(不在from子句中)
derived
包含在from子句中的子查询。MySQL会将结果存放在一个临时表中,也称为派生表(derived的英文含义)
union
table
这一列表示explain的一行正在访问哪个表。
type
这一列表示关联类型或访问类型,即MySQL决定如何查找表中的行,查找数据行记录的大概范围
依次从最优到最差分别为:system>const>eq_ref>ref>range>index>ALL一般来说,得保证查询达到range级别,最好达到ref
font color=\"#ff0000\
eq_ref:primarykey或uniquekey索引的列被连接使用,最多只会返回一条符合条件的记录。这可能是在const之外最好的联接类型了,简单的select查询不会出现这种type。用于主键索引进行表连接场景
ref:相比eq_ref,不使用唯一索引,而是使用普通索引或者唯一性索引的部分前缀,索引要和某个值相比较,可能会找到多个符合条件的行。
1.简单select查询,name是普通索引(非唯一索引)
2.关联表查询,idx_film_actor_id是film_id和actor_id的联合索引,这里使用到了film_actor的左边前缀film_id部分。
index:扫描全索引就能拿到结果,一般是扫描某个二级索引,这种扫描不会从索引树根节点开始快速查找,而是直接对二级索引的叶子节点遍历和扫描,速度还是比较慢的,这种查询一般为使用覆盖索引,二级索引一般比较小,所以这种通常比ALL快一些。
表中有个主键索引以及一个普通索引,查询的时候,会用普通索引这个二级索引的叶子节点进行查询
ALL:即全表扫描,扫描你的聚簇索引的所有叶子节点。通常情况下这需要增加索引来进行优化了。
表里面虽然有三个字段,但是只有一个主键,其他两个字段没有索引,也不会走index,直接扫描聚簇索引的叶子节点
possible_keys
key
key_len
ref
rows
Extra
1)Usingindex:使用覆盖索引
2)Using where:使用where语句来处理结果,并且查询的列未被索引覆盖
0 条评论
回复 删除
下一页