explain命令的表头
7、ken_len
索引中使用的字节数,可通过该列计算使用索引的长度。该列显示的是索引字段的最大可能长度,并不是实际使用的长度,是根据表定义计算得出的,不是通过表内检索得出。该列长度越短查找越快。
8、 ref
表示使用了索引的哪一列或是索引了一个常量值
9、rows
估算找到对应记录需要检索的行数,基于查找的type和索引使用情况key、key_len综合得出。该值越小,查询越快。
10、Extra
额外信息
-
Using filesort:使用外部索引排序,而非按照表内索引顺序读取。在MySQL中无法按照索引完成的排序称为文件排序。
-
Using temporary
使用到临时表来保存查询中间结果,在对查询结果排序时用到了临时表,常见排序查询和分组查询,应尽量避免。
-
Using index
查询使用了覆盖索引,避免了访问表的数据行,效率有显著提升。
同时出现Using where,则表示索引被用来执行索引键值的查找;如果没有出现,表示索引用来读取数据而非查找。
-
Using where
使用了where子句 -
Using join buffer
使用了连接缓存 -
impossible where
where子句的值总是false,不能用来获取任何元组
-
select tables optimized away
没有使用group by子句的情况下,基于索引优化MIN/MAX操作或者对于MyISAM存储引擎优化COUNT(*)操作,不需要等到执行阶段进行计算,而是查询执行计划生成的时候完成优化。 -
distinct
优化distinct操作,即找到了第一个匹配值后就不再继续查找。