常见取值
No tables used
当查询语句的没有FROM子句时将会提示该额外信息
Impossible WHERE
查询语句的WHERE子句永远为FALSE时将会提示该额外信息
No matching min/max row
当查询列表处有MIN或者MAX聚集函数,但是并<font color="#c41230">没有符合WHERE子句中的搜索条件的记录</font>时,将会提示该额外信息
Using index
<span style="font-size: inherit;">当我们的查询列表以及搜索条件中只包含属于某个索引的列,也就是在<font color="#c41230">可以使用索引覆盖(bu)</font>的情况下,在Extra列将会提示该额外信息</span><br>
Using index condition
如果在查询语句的执行过程中将要使用<font color="#c41230">索引条件下推</font>这个特性,在Extra列中将会显示Using index condition
什么是索引下推
SELECT * FROM s1 WHERE key1 > 'z' AND key1 LIKE '%a';
对于上面的这条SQL语句,因为这时候走的是以range访问方式走的key1索引。<br><font color="#c41230">而key1 LIKE '%a'由于不满足前缀匹配,所以需要回表访问的时候再过滤</font>
可是这个条件列又刚好是key1索引列。<font color="#c41230">如果在二级索引的时候,就进行过滤条件判断,不放到回表后判断。<br>那么就可以减少回表访问的次数,也就是减少随机IO的发生</font>。
所以把<font color="#c41230">【如果在二级索引的时候,就进行过滤条件判断,不放到回表后判断 】</font>这种情况叫做索引下推
Using where
当我们使用<font color="#c41230">全表扫描</font>来执行对某个表的查询,并且该语句的<font color="#c41230">WHERE子句中有针对该表的搜索条件时</font>
当使用<font color="#c41230">索引访问</font>来执行对某个表的查询,并且该语句的WHERE子句中有<font color="#c41230">除了该索引包含的列之外的其他搜索条件时</font>,在Extra列中也会提示上述额外信息。
Using join buffer (Block Nested Loop)
使用JOIN BUFFER来降低被驱动表的访问次数从而提高查询效率
Not exists
当我们使用左(外)连接时,如果WHERE子句中包含要求<font color="#c41230">被驱动表的某个列等于NULL值</font>的搜索条件<font color="#c41230">,而且那个列又是不允许存储NULL值的</font>,那么在该表的执行计划的Extra列就会提示Not exists额外信息. (也就是如果在被驱动表中匹配到一条记录,那么就<font color="#c41230">不再往下走了</font>)
Using intersect(...)、Using union(...)和Using sort_union(...)
使用到索引合并的时候就会有这种情况啦
Zero limit
当我们的LIMIT子句的参数为0时
Using filesort
不根据所以树进行排序,而在内存中或者磁盘上进行排序的方式统称为文件排序(英文名:filesort)
Using temporary
在许多查询的执行过程中,MySQL可能会借助<font color="#c41230">临时表</font>来完成一些功能,比如<font color="#c41230">去重、排序</font>之类的,比如我们在执行许多包含<font color="#c41230">DISTINCT、GROUP BY、UNION</font>等子句的查询过程中,如果不能有效利用索引来完成查询,MySQL很有可能寻求通过建立内部的临时表来执行查询。
DISTINCT的栗子
Group by 的栗子
Start temporary, End temporary
查询优化器会优先尝试将IN子查询转换成semi-join,而<font color="#c41230">semi-join</font>又有好多种执行策略,当执行策略为<font color="#c41230">DuplicateWeedout</font>时,也就是通过建立临时表来实现为外层查询中的记录进行去重操作时,<font color="#c41230">驱动表查询执行计划的Extra列将显示Start temporary</font>提示,<font color="#c41230">被驱动表查询执行计划的Extra列将显示End temporary</font>提示
LooseScan
在将In子查询转为<font color="#c41230">semi-join</font>时,如果采用的是<font color="#c41230">LooseScan</font>执行策略,则在驱动表执行计划的Extra列就是显示LooseScan提示
FirstMatch(tbl_name)
在将In子查询转为<font color="#c41230">semi-join</font>时,如果采用的是<font color="#c41230">FirstMatch</font>执行策略,则在被驱动表执行计划的Extra列就是显示FirstMatch(tbl_name)提示