一 Extra
不适合在其他列中显示但十分重要的额外信息。
二 Using filesort
说明 mysql 会对数据使用一个外部的索引排序,而不是按照表内的索引顺序进行读取。MySQL 中无法利用索引完成的排序操作称为“文件排序”。
这种情况很糟糕,可谓九死一生。如果可以,尽快优化。
1 实战1
出现 filesort 的情况。
优化后,不再出现 filesort 的情况:
查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度。
2 实战2
三 Using temporary
使了用临时表保存中间结果,MySQL 在对查询结果排序时使用临时表。常见于排序 order by 和分组查询 group by。
这种情况更糟糕,可为十死无生,因为生成了中间表,太折腾。
1 实战1
优化前:
优化后
2 实战2
四 Using index
1 基本概念
Using index 代表表示相应的 select 操作中使用了覆盖索引(Covering Index),避免访问了表的数据行,效率不错!
如果同时出现 using where,表明索引被用来执行索引键值的查找。
如果没有同时出现 using where,表明索引用来读取数据而非利用索引执行查找。
这个是好事,提高了速度。
利用索引进行了排序或分组。
2 覆盖索引
覆盖索引,也叫索引覆盖。
注意:
如果要使用覆盖索引,一定要注意 select 列表中只取出需要的列,不可 select *
因为如果将所有字段一起做成索引会导致索引文件过大,查询性能下降。
3 实战
如果同时出现 using where,表明索引用来执行索引键值的查询。
如果没有同时出现 using where,表明索引用来读取数据而非利用索引执行查找。
五 Using where
表明使用了 where 过滤。
六 Using join buffer
使用了连接缓存。
七 impossible where
where 子句的值总是 false,不能用来获取任何元组。
1 实战1
2 实战2
八 distinct
优化 distinct 操作,在找到第一个匹配的元组后即停止找同样值的动作。
九 综合