possible_keys
此次查询中可能选用的索引,一个或多个
key查询真正使用到的索引,select_type为index_merge时,这里可能出现两个以上的索引,其他的
select_type这里只会出现一个。
key_len
用于处理查询的索引长度,如果是单列索引,那就整个索引长度算进去,如果是多列索引,那么查
询不一定都能使用到所有的列,具体使用到了多少个列的索引,这里就会计算进去,没有使用到的
列,这里不会计算进去。
留意下这个列的值,算一下你的多列索引总长度就知道有没有使用到所有的列了。
另外,key_len只计算where条件用到的索引长度,而排序和分组就算用到了索引,也不会计算到
key_len中。
ref
如果是使用的常数等值查询,这里会显示const
如果是连接查询,被驱动表的执行计划这里会显示驱动表的关联字段
如果是条件使用了表达式或者函数,或者条件列发生了内部隐式转换,这里可能显示为func
rows
这里是执行计划中估算的扫描行数,不是精确值(InnoDB不是精确的值,MyISAM是精确的值,主要原
因是InnoDB里面使用了MVCC并发机制)
extra(重要)
这个列包含不适合在其他列中显示单十分重要的额外的信息,这个列可以显示的信息非常多,有几十
种,常用的有:using fifilesort(重要)、using index(重要)、using index condition(重要)、
using temporary、distinct、using where(重要)
using fifilesort(重要):
- 排序时无法使用到索引时,就会出现这个。常见于order by和group by语句中
- 说明MySQL会使用一个外部的索引排序,而不是按照索引顺序进行读取。
- MySQL中无法利用索引完成的排序操作称为“文件排序”
索引失效分析