mysql explain详解
Posted tilamisu007
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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从句来限制哪些行将与下一张表匹配或者是返回给用户。
以上是关于mysql explain详解的主要内容,如果未能解决你的问题,请参考以下文章