参数说明

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、indexall
除了 All 以外,其它的类型都可以用到索引,除了index_merge可以使用多个索引之外,其它的类型最多只能使用到一个索引。
注意!!最少也应该要使用索引到range级别!

key

key列显示mysql实际决定使用的索引,必然包含在possible_keys中。如果没有选择索引,键是NULL。想要强制使用或者忽视possible_keys列中的索引,在查询时指定FORCE INDEX、USE INDEX或者IGNORE index