mysql explain 执行计划

使用方法

explain select * from t
mysql explain 执行计划

字段解释

id

select 查询序列号,表示sql语句执行的顺序

select_type

  • simple: 表示最简单的select,没有union和子查询
  • primary: 最外面的查询或者主查询,在有子查询的语句中,最外面的select查询就是primary
  • subquery: 子查询
  • union: union语句的第二个或者最后那一个select
  • union result: unino之后的结果
  • derived:衍生表

table

所查询的表,简称,或者是中间表

type

  • const: 表中最多有一个匹配行,const用于比较primary key 或者unique索引快
  • eq_ref: 唯一性索引扫描,对于每个来自于前面的表的记录,从该表中读取唯一一行
  • ref: 非唯一性索引扫描,对于每个来自于前面的表的记录,所有匹配的行从这张表取出
  • index_merge:查询语句中用到了一张表的多个索引时,mysql会将多个索引合并到一起
  • range:按指定范围(如 in,<,>,between,and等,但是前提是此字段要建立索引)来检索
  • index: 全索引扫描,通常比All快,因为索引文件通常比数据文件小
  • all :全表扫描,多数情况下需要优化

possible_keys

可能使用到的索引

key

实际使用的索引

key_len

索引字段的长度

ref

列与索引的比较,表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值

rows

扫描的行数

filtered

按表条件过滤的行百分比

extra

  • using index:使用了覆盖索引(Covering Index),即通过索引就能返回结果,无需访问表
  • using where:查询使用了where 语句来处理结果
  • using join buffer:获取连接条件时没有使用索引,并且需要连接缓冲区来存储中间结果
  • using filesort:这是 order by 语句的结果。这可能是一个CPU密集型的过程。using filesort表示出现了文件内排 序,表示很不好的现象,必须要优化,特别是大表,可以通过选择合适的索引来改进性能,用索引来为查询结果排序
  • using temporary:mysql需要创建一张临时表来保存中间结果。 也就是说,需要先把数据放到临时表中,然后从临时 表中获取需要的数据。出现这种临时表,也是必须需要优化的地方,特别是数据量大的情况。两个常见的原因是在来自 不同表的列上使用了distinct,或者使用了不同的 order by 和 group by 列
上一篇:SQL优化 - 避免索引失效的一些原则


下一篇:MySql(六):Explain详解