Using temporary,表示的是需要使用临时表;
Using index condition; 索引下推
官方文档:https://dev.mysql.com/doc/refman/5.7/en/index-condition-pushdown-optimization.html
Using filesort,表示的是需要执行排序操作。
在sort_bufferz中排序 ,参数sort_buffer_size 大小
去按字段排序
rowid排序
SET max_length_for_sort_data 单行超过这个参数就使用rowID排序
可以使用覆盖索引优化order by.因为索引本来就是有序,就不用再排序了
using where 在服务端进行过滤?
MySQL执行计划extra中的using index 和 using where using index 的区别 - MSSQL123 - 博客园
using index
官网 MySQL :: MySQL 5.7 Reference Manual :: 8.8.2 EXPLAIN Output Format
摘录来自: 施瓦茨 (Baron Schwartz). “高性能MySQL:第3版。” Apple Books.
“Extra列
这一列包含的是不适合在其他列显示的额外信息。MySQL用户手册里记录了大多数可以在这里出现的值。其中许多在本书中已经提到过。
常见的最重要的值如下。
“Using index”
此值表示MySQL将使用覆盖索引,以避免访问表。不要把覆盖索引和index访问类型弄混了。
“Using where”
这意味着MySQL服务器将在存储引擎检索行后再进行过滤。许多WHERE条件里涉及索引中的列,当(并且如果)它读取索引时,就能被存储引擎检验,因此不是所有带WHERE子句的查询都会显示“Using where”。有时“Using where”的出现就是一个暗示:查询可受益于不同的索引。
“Using temporary”
这意味着MySQL在对查询结果排序时会使用一个临时表。”
“Using filesort”
这意味着MySQL会对结果使用一个外部索引排序,而不是按索引次序从表里读取行。MySQL有两种文件排序算法,你可以在第6章读到相关内容。两种方式都可以在内存或磁盘上完成。EXPLAIN不会告诉你MySQL将使用哪一种文件排序,也不会告诉你排序会在内存里还是磁盘上完成。
“Range checked for each record (index map: N)”
这个值意味着没有好用的索引,新的索引将在联接的每一行上重新估算。N是显示在possible_keys列中素引的位图,并且是冗余的。”