mysql学习-explain

106 阅读1分钟

type字段

从小到大:const -> ref -> eq_ref -> ref_or_null -> index_merge -> range -> index ->all

index_merge:

  1. 索引合并,可以使用到多个索引。
  2. 交集比回表、并集比全表扫描
  3. extra会提示你使用联合索引。

index:

  1. 可以使用索引覆盖,但需要扫描全部的索引记录。
  2. 如索引为 key_part1、key_part2、key_part3组成联合索引, 查询语句 select key_part2 where key_part3 = xx;

possible_key字段

  1. 可能用到的索引,key1、key2
  2. possible_key不是越多越好,索引越多查询优化器计算成本的时间就越长,可以删除不必要的索引,如跟联合索引公用

key字段

  1. 实际使用的索引,如果是key2,表示经过查询优化器计算不同索引成本后,最后使用key2,不使用key1
  2. 如果是type类型为index,possible_key是空的,但是key有值

ref字段

  1. 展示的就是与索引列作等值匹配的东西是个啥,可能是常量也可能是字段

rows字段

  1. 预计扫描的行数

extra字段

  1. 说明一些额外信息的,可以通过这些信息额外知道mysql是如何执行的查询语句
  2. Using index: 索引覆盖,不需要回表操作
  3. Using index condition: 索引条件中虽然有索引列,但使用不到
  4. Using where: 全表扫描时,有针对该表的搜索条件字段
  5. Using join buffer: 基于块的嵌套循环算法,被驱动表没有使用到索引
  6. Using intersect、Using union、和 Using sort_union,索引合并了,可以建联合索引
  7. Using fileSort,文件排序,mysql为每个线程分配固定的排序空,超过后就使用文件排序,比如排序字段没有索引,或联合索引排序顺序不对