MYSQL性能分析之explain 之extra列案例分析


1. Using where Using index
查询的列被索引覆盖,并且where筛选条件是索引列之一但是不是索引的前导列,意味着无法直接通过索引查找来查询到符合条件的数据

2. Using index condition
与 Using where 类似,查询的列不完全被索引覆盖,where条件中是一个前导列的范围

3. using temporary
表示使用了临时表存储中间结果。临时表可以是内存临时表和磁盘临时表,执行计划中看不了来,需要查看 status变量,used_temp_table, user_tmp_disk_table才能看出来

4. using filesort
mysql会对结果使用一个外部索引排序,而不是按索引次序从表里读取行。此时mysql会根据联接类型浏览所有符合条件的记录,并保存排序关键字和行指针,然后排序关键字并按顺序检索行信息。这种情况下一般也是要考虑使用索引来优化的

5. using itersect
表示使用and的各个索引的条件时,该信息表示是从处理结果获取交集

6. using union
表示使用or连接各个使用索引的条件时,该信息表示从处理结果获取并集

7. using sort_union和using sort_intersection
用and和or查询信息量大时,先查询主键,然后进行排序合并后返回结果集

8. firstmatch(tb_name)
5.6.x开始引入的优化子查询的新特性之一,常见于where字句含有in()类型的子查询。如果内表的数据量比较大,就可能出现这个

9. loosescan(m..n)
5.6.x开始引入的优化子查询的新特性之一,在in()类型的子查询中 ,子查询返回的可能有重复记录时,就可能出现这个