参数说明
explain 命令一共返回12列信息,分别是:
id、select_type、table、partitions、type、possible_keys、key、key_len、ref、rows、filtered、Extra
select_type 列(很重要)
查询类型,主要用于区别 普通查询、联合查询(union、union all)、子查询等复杂查询。
simple
表示不需要union操作或者不包含子查询的简单select查询。有连接查询时,外层的查询为simple,且只有一个。
primary
一个需要使用union的操作或者含有子查询的select,位于最外层的单位查询的select_type即为primary。且只有一个
table 列
- 显示的查询表名,如果查询使用了别名,那么这里显示的就是别名
- 如果不涉及对数据表的操作,那么这里就是null
- 如果显示为尖括号括起来的
就表示这是一个临时表,N就是执行计划的id,表示结果来自这个查询 - 如果显示为尖括号括起来的
也表示一个临时表,表示来自union查询id为n、m的结果集
type
依次从好到差:
system、const、eq_ref、ref、full_text、ref_or_null、unique_subquery、 index_subquery、range、index_merge、index、all
除了 All 以外,其它的类型都可以用到索引,除了index_merge可以使用多个索引之外,其它的类型最多只能使用到一个索引。
注意!!最少也应该要使用索引到range级别!
key
key列显示mysql实际决定使用的索引,必然包含在possible_keys中。如果没有选择索引,键是NULL。想要强制使用或者忽视possible_keys列中的索引,在查询时指定FORCE INDEX、USE INDEX或者IGNORE index
