mysql explain 相关列的含义

1、id列  标识select所属的行。如果在语句中没有子查询或联和,那么只会是唯一的select,否则,内层的select会顺序编号。

2、select_type 列 显示对应行是简单还是复杂select

    1)simple 意味着查询不包括子查询和union。如果查询有任何负责的子部分,则最外层部分标记primary。

    2)subquery 包含在select列表中的子查询中的select 即不在from子句中。

    3)derived 表示包含在from子句的子查询中的select,称其为“派生表”。

    4)union 在union中的第二个和随后的select被标记为union。如果union被from子句中的子查询包含,那么第一个select会被标记为derived

    5)union result 表示从union的匿名临时表检索结果的select被标记于union result

3、table列 该列显示对应行正在显示哪张表或该表的别名

4、type列 

    1)all 全表扫描

    2)index 跟全表扫描一样,不过在扫描时是安装索引次序。它的主要优点是避免了排序;最大的缺点是要承担安索引次序读取整个表的开销。如果在extre列看到了“using index” 说明mysql正在使用覆盖索引,它至扫描索引的部分,而不是索引次序的每一行

    3)rang 范围扫描  显而易见的范围扫描是带有between或where子句里带有>的查询

    4)ref 索引访问,它返回所有匹配某个单个值的行

    5)eq_ref 使用这种索引查找,mysql最多返回一条符合条件的记录,它在使用主键或唯一索引时看到

5、key列 决定采用那个索引来优化对该表的访问

6、ref 显示之前的表在key列记录的索引中查找值所用的列或常量

7、rows 估计为了找到所需的行而需要读取的行数

8、extra列 不适合在其他列显示的额外信息

    1)using index 使用覆盖索引

    2)using where     将在存储引擎检索行后再进行过滤

    3)using temporary 对查询结果排序时会使用一个临时表

    4)using filesort 对结果使用一个外部索引排序

你可能感兴趣的:(explain,mysql)