mysql explain详解

id: 序号;实际表示优先级,值越大越先被执行。

 --------------------------------------------------------------

select_type

SELECT 语句的类型,可以有下面几种。

SIMPLE:最简单的SELECT语句,没有使用UNION或子查询。

PRIMARY:在嵌套查询中是最外层的SELECT语句,在UNION查询中是最前面的SELECT语句。

UNION:UNION中第二个以及后面的SELECT语句。

DERIVED:派生表,在FROM子句中的子查询语句(subquery in FROM clause)。

UNION RESULT:一个UNION查询的结果。

DEPENDENT UNION:顾名思义,首先需要满足UNION的条件,及UNION中第二个以及后面的SELECT语句,同时该语句依赖外部的查询。

部分type说明:   从好到坏
const: 优化成常量-主键在where条件列表
eq_ref: 唯一性索引扫描
ref: 非唯一性索引扫描
range: 扫描部分索引,索引范围扫描
index: 扫描整颗索引树
ALL: 扫描全表
-------------------------------------------------------------------------------------

Extra

Extra是EXPLAIN输出中另外一个很重要的列,该列显示MySQL在查询过程中的一些详细信息,包含的信息很多,只选择几个重点的介绍下。

Using filesort:
MySQL有两种方式可以生成有序的结果,通过使用索引或者排序操作,当Extra中出现了Using filesort 说明MySQL使用了后者,但注意虽然叫filesort但并不是说明就是用了文件来进行排序,只要可能排序都是在内存里完成的。大部分情况下利用索引排序更快,所以一般这时也要考虑优化查询了。

Using temporary:
说明使用了临时表,一般看到它说明查询需要优化了,就算避免不了临时表的使用也要尽量避免硬盘临时表的使用。

Using index:
说明查询是覆盖了索引的,这是好事情。MySQL直接从索引中过滤不需要的记录并返回命中的结果。这是MySQL服务层完成的,但无需再回表查询记录。

Using index condition
这是MySQL 5.6出来的新特性,叫做“索引条件推送”。简单说一点就是MySQL原来在索引上是不能执行如like这样的操作的,但是现在可以了,这样减少了不必要的IO操作,但是只能用在二级索引上,详情点这里

Using where:
使用了WHERE从句来限制哪些行将与下一张表匹配或者是返回给用户。

原文地址:https://www.cnblogs.com/tilamisu007/p/9268972.html