Explain工具详解
Explain介绍
在select语句之前增加explain关键字,执行查询会返回执行计划信息,而不是执行这条SQL;我们可以根据
返回的执行计划分析查询语句的性能瓶颈,总而言之explain可以模拟优化器执行SQL语句。
Explain中的列
- id列
- id列是select的序列号,id列越大执行优先级越高,相同则从上往下,为Null则最后执行;
- select_type列
- simple:简单查询(不包含子查询和union);
- primary:复杂查询中最外层的 select;
- subquery:包含在 select 中的子查询(不在 from 子句中);
- derived:包含在 from 子句中的子查询(派生表);
- union:在 union 语句中的除第一个select外的其他select;
- table列
- 这一列表示explain结果表中的这行正在访问哪个表;
- type列
- 这一列表示关联类型或访问类型,依次从最优到最差分别为:system>const>eq_ref>ref>range>index>ALL;
- system,const:用于primary key 或 unique key 的所有列与常数比较时,所以表最多有一个匹配行,读取1次,速度比较快,system是const的特例,表里只有一条元素匹配时为system;
- eq_ref:primary key 或 unique key 索引的所有部分被连接使用,最多只会返回一条符合条件的记录;
- ref:相比 eq_ref,不使用唯一索引,而是使用普通索引或者唯一性索引的部分前缀;
- range:范围扫描通常出现在 in(), between ,> ,<, >= 等操作中。使用一个索引来检索给定范围的行;
- index:扫描全表索引,这通常比ALL快一些;
- ALL:即全表扫描;
- 这一列表示关联类型或访问类型,依次从最优到最差分别为:system>const>eq_ref>ref>range>index>ALL;
- possible_keys列
- 这一列显示查询可能使用哪些索引来查找;
- key列
- 这一列显示mysql实际采用哪个索引来优化对该表的访问;
- key_len列
- 这一列显示了mysql在索引里使用的字节数,通过这个值可以算出具体使用了索引中的哪些列;
- ref列
- 这一列显示了在key列记录的索引中,表查找值所用到的列或常量,常见的有:const(常量),字段名;
- rows列
- 这一列是mysql估计要读取并检测的行数;
- Extra列
- 这一列展示的是额外信息,常见值有;
- Using index:使用覆盖索引
- Using index condition:查询的列不完全被索引覆盖,where条件中是一个前导列的范围;
- Using where:使用where语句来处理结果,查询的列未被索引覆盖;
- Using temporary:mysql需要创建一张临时表来处理查询;
- Using filesort:将用外部排序而不是索引排序,数据较小时从内存排序,否则需要在磁盘完成排序;
- 这一列展示的是额外信息,常见值有;
本站文章主要用于个人学习记录,可能对您有所帮助,仅供参考!

