explain各列的解释

2.select_type

1)、simple 简单类型 语句中没有子查询或union

2)、primary 最外层的select ,不是主键

3)、union union是在select 语句中第二个select语句后面所有的select,第一个select 为primary

4)、dependent subquery 子查询中内层中第一个select语句

5)、dependent  union 子查询中union且为union中第二个select开始的后面所有select,依赖于外部的结果集。

6)、SUBQUERY 子查询内层查询的第一个SELECT,结果不依赖于外部查询结果集。

7)、devived 派生表的查询语句

8)、uncacheable subquery 结果集无法缓存的子查询

9)、union result union中合并的结果

4.type

1)、all 全表扫描,效果是最不理想的。

2)、const const是在where条件以常量作为查询条件,最多只会有一条记录匹配,由于是常量,实际上只须要读一次。

3)、eq_ref 最多只会有一条匹配结果,一般是通过主键或唯一键索引来访问。一般会出现在连接查询的语句中。

4)、fulltext 进行全文索引检索。

5)、index 全索引扫描。MySQL在扫描表时按索引次序进行而不是行。

6)、index_merge 查询中同时使用两个(或更多)索引,然后对索引结果进行合并(merge),再读取表数据。

7)、index_subquery 子查询中的返回结果字段组合是一个索引(或索引组合),但不是一个主键或唯一索引。

8)、rang 索引范围扫描。一个有限制的索引扫描,它开始于索引里的某一点,返回匹配这个值域的行(显而易见的范围扫描.即带有BETWEEN或在WHERE子句中带有>的查询,当MySQL使用索引去查找一系列值的时候,如IN()和OR列表,也为显示的范围扫描)

9)、ref 也叫索引查找,他返回所有匹配某单个值的行,它可能会找到多个符合条件行。

10)、ref_or_null 与ref的唯一区别就是在使用索引引用的查询之外再增加一个空值的查询。

11)、system 系统表,表中只有一行数据;

12)、unique_subquery子查询中的返回结果字段组合是主键或唯一约束。

10Extra

1)、Using index  此值表示mysql将使用覆盖索引,以避免访问表。不要把覆盖索引和index访问类型弄混了。

2)、Using where  这意味着mysql服务器将在存储引擎检索行后再进行过滤,许多where条件里涉及索引中的列,当(并且如果)它读取索引时,就能被存储引擎检验,因此不是所有带where子句的查询都会显示Using where。有时Using where的出现就是一个暗示:查询可受益于不同的索引。

3)、Using temporary 这意味着mysql在对查询结果排序时会使用一个临时表。

4)、Using filesort 这意味着mysql会对结果使用一个外部索引排序,而不是按索引次序从表里读取行。mysql有两种文件排序算法,这两种排序方式都可以在内存或者磁盘上完成,explain不会告诉你mysql将使用哪一种文件排序,也不会告诉你排序会在内存里还是磁盘上完成。

5)、Range checked for each record(index map: N)

    这个意味着没有好用的索引,新的索引将在联接的每一行上重新估算,N是显示在possible_keys列中索引的位图,并且是冗余的。


相关文章: