explain 参数解析

12个返回参数,分5、4、3理解记忆

5个

查询相关

id 每个select 对应一个id,id越大越优先执行,优先级越高
select_type 查询类型,有11种
table 当前select对应的表名
partitions 匹配的表分区
type 对当前表的关联或者说匹配类型,7种常见

4个

索引相关

possible_keys 可能用到的索引
key 实际用到的索引
key_len 实际用到的索引长度
ref 当使用索引列等值查询时,与索引列进行匹配的对象信息

3个

其他

rows 预计读取的行数
filtered 经过检索过滤后,剩余条数百分比
extra 额外信息

11个select_type类型,7个常见

SIMPLE 简单的SELECT(不使用UNION或子查询)
PRIMARY 最外层的SELECT
UNION UNION中的第二个或随后的SELECT查询,不依赖于外部查询的结果集
UNION RESULT 一个UNION的结果
DEPENDENT UNION UNION中的第二个或随后的SELECT查询,依赖于外部查询的结果集
SUBQUERY 子查询中的第一个SELECT查询,不依赖于外部查询的结果集
DEPENDENT SUBQUERY 第一个SELECT子查询,依赖于外部查询的结果集
DERIVED 派生表用于FROM子句里有子查询的情况。MySQL会递归执行这些子查询,把结果放在临时表里
MATERIALIZED 子查询的结果被保存为虚拟临时表,而不是为每一行执行它
UNCACHEABLE SUBQUERY 结果集无法缓存的子查询,必须重新为外层查询的每一行进行评估
UNCACHEABLE UNION UNION中的第二个或更后面的SELECT查询属于不可缓存的子查询

11种type类型,7个常见,优劣顺序自上而下

system 表中只有一条数据,并使用 MyISAM 
const 通过主键或唯一索引的等值查询,并且只匹配一条数据。 explain select * from table where id = 1
eq_ref 多表连接查询,被驱动表使用主键或唯一索引等值查询 explain select * from table1 t1 left join table2 t2 on  t1.id = t2.id where t1.id = t2.id
ref 普通二级索引等值查询 explain select * from table1 t1 left join table2 t2 on  t1.name = t2.name where t1.name = t2.name
range 命中索引,并且区间查询 explain select * from table where age > 1
index 直接在索引树上匹配,并不需要回表 explain select count(*) from table
all 全表扫描 explain select * from table

你可能感兴趣的:(sql,数据库)