MySQL EXPLAIN Extra Information 常见的执行计划额外信息说明

EXPLAIN输出的Extra列包含有关MySQL如何解析查询的其他信息。 

Using filesort

当Query中包含ORDER BY操作,并且无法利用索引完成排序操作的时候,MySQL Query Optimizer就会选择相应的排序算法来实现。数据较少时从内存排序,否则从磁盘排序。

Using index

仅使用索引树中的信息从表中检索列信息(覆盖索引),而不必进行其他查找以读取实际行(不需要回表)。 当查询仅使用属于单个索引的列时,可以使用此策略。

对于具有用户定义的聚簇索引的InnoDB表,即使Extra列中没有使用索引,也可以使用该索引。 如果类型是索引并且键是PRIMARY,就是这种情况。

Using index condition

先条件过滤索引,过滤完索引后找到所有符合索引条件的数据行,随后用WHERE子句中的其他条件去过滤这些数据行。

Using index for group-by

数据访问和Using index一样,所需数据只须要读取索引,当Query中使用GROUP BY或DISTINCT子句时,如果分组字段也在索引中,Extra中的信息就会是Using index for group-by。

Using join buffer (Block Nested Loop), Using join buffer (Batched Key Access) 

Block Nested-Loop算法:将外层循环的行/结果集存入join buffer, 内层循环的每一行与整个buffer中的记录做比较,从而减少内层循环的次数。主要用于当被join的表上无索引。
Batched Key Access算法:当被join的表能够使用索引时,就先好顺序,然后再去检索被join的表。对这些行按照索引字段进行排序,因此减少了随机IO。如果被Join的表上没有索引,则使用老版本的BNL策略(BLOCK Nested-loop)。

Using MRR

基于辅助/二级索引查询,减少随机IO,并且将随机IO转化为顺序IO,提高查询效率。

Using temporary

MySQL使用临时表保存临时的结构,以用于后续的处理,MySQL首先创建heap引擎的临时表,如果临时的数据过多,超过max_heap_table_size的大小,会自动把临时表转换成MyISAM引擎的表来使用。

Using where

WHERE子句用于限制要与下一张表匹配或发送到客户端的行。

参考:https://blog.csdn.net/poxiaonie/article/details/77757471


 

猜你喜欢

转载自blog.csdn.net/Anenan/article/details/113858855