1.id列
id列的编号是 select 的序列号,有几个 select 就有几个id,并且id的顺序是按 select 出现的顺序增长的。id列越大执行优先级越高,id相同则从上往下执行,id为NULL最后执行
1.select_type表示对行是简单还是复杂的查询
**simple:简单的查询不包含子查询 **
**primary:复杂查询中的最外层查询 **
subquery:包含在select中的子查询(不再from子语句中)
derived:包含在from子语句中的查询。mysql将结果放到一个临时表中,也称为派生表
2.table 表示 explain 的一行正在访问哪个表
当from子句中有子查询时,table列是 derivenN 格式,表示当前查询依赖 id=N 的查询,于是先执行 id=N 的查询。当有 union 时,UNION RESULT 的 table 列的值为<union1,2>,1和2表示参与 union 的 select 行id
3.type列
这一列表示关联类型或访问类型,即MySQL决定如何查找表中的行,查找数据行记录的大概范围。依次从最优到最差分别为:system > const > eq_ref > ref > range > index > ALL一般来说,得保证查询达到range级别,最好达到ref
NULL:mysql能够在优化阶段分解查询语句,在执行阶段用不着再访问表或索引。例如:在索引列中选取最小值,可以单独查找索引来完成,不需要在执行时访问表
Systrm:表里只有一条元素匹配时为system
const:主键或者唯一索引查询
eq_ref:主键或者唯一索引的所有部分被连接使用
ref:二级索引(非唯一索引)查询
range:索引范围查询
index:扫描全索引(这里一般是二级索引),这种查询一般为使用覆盖索引
all:即全表扫描,扫描你的聚簇索引的所有叶子节点
4.Extra
Using index:索引覆盖
Using where:普通查询未使用索引
Using index condition:使用索引查询了,但是没有索引覆盖
Using temporary:临时表查询,未走索引
Using filesort:排序未走索引