type字段
从小到大:const -> ref -> eq_ref -> ref_or_null -> index_merge -> range -> index ->all
index_merge:
- 索引合并,可以使用到多个索引。
- 交集比回表、并集比全表扫描
- extra会提示你使用联合索引。
index:
- 可以使用索引覆盖,但需要扫描全部的索引记录。
- 如索引为 key_part1、key_part2、key_part3组成联合索引, 查询语句 select key_part2 where key_part3 = xx;
possible_key字段
- 可能用到的索引,key1、key2
- possible_key不是越多越好,索引越多查询优化器计算成本的时间就越长,可以删除不必要的索引,如跟联合索引公用
key字段
- 实际使用的索引,如果是key2,表示经过查询优化器计算不同索引成本后,最后使用key2,不使用key1
- 如果是type类型为index,possible_key是空的,但是key有值
ref字段
- 展示的就是与索引列作等值匹配的东西是个啥,可能是常量也可能是字段
rows字段
- 预计扫描的行数
extra字段
- 说明一些额外信息的,可以通过这些信息额外知道mysql是如何执行的查询语句
- Using index: 索引覆盖,不需要回表操作
- Using index condition: 索引条件中虽然有索引列,但使用不到
- Using where: 全表扫描时,有针对该表的搜索条件字段
- Using join buffer: 基于块的嵌套循环算法,被驱动表没有使用到索引
- Using intersect、Using union、和 Using sort_union,索引合并了,可以建联合索引
- Using fileSort,文件排序,mysql为每个线程分配固定的排序空,超过后就使用文件排序,比如排序字段没有索引,或联合索引排序顺序不对