Mysql性能调优(二) Explain工具详解

EXPLAIN介绍

在select语句之前增加explain关键字,执行查询会返回执行计划信息,而不是执行这条SQL;我们可以根据返回的执行计划分析查询语句的性能瓶颈,总而言之explain可以模拟优化器执行SQL语句。

explain中的列

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

你可能感兴趣的:(Mysql)