mysql知识盘点【伍】_执行计划


系列文章:

mysql知识盘点【壹】_SQL优化

mysql知识盘点【贰】_InnoDB引擎索引

mysql知识盘点【叁】_主从复制

mysql知识盘点【肆】_调优参数


本文总结一下sql语句执行计划的查看,在mysql中,我们可以通过EXPLAIN SELECT ... 来查看该查询sql的执行计划,执行后的输出大致是这样的:




下面详细说说每一列的意义:


select_type


将select查询分为简单(simple)和复杂两种类型,复杂类型又分为子查询(subquery)和from列表中包含子查询(drived)。



type


对表的访问方式,效率由高到低分别为const、eq_ref、ref、range、index和all。

all : 全表扫描;

index : 按索引次序扫描,先读索引,再读实际的行,结果还是全表扫描,主要优点是避免了排序。因为索引是排好的;

range : 以范围的形式扫描;

ref : 非唯一索引访问(只有普通索引);

eq_ref : 使用唯一索引查找(主键或唯一索引);

const : 常量查询,在整个查询过程中这个表最多只会有一条匹配的行;


possible_keys


显示可能应用在这张表中的索引。如果为空,没有可能的索引。可以为相关的域从where语句中选择一个合适的语句



key


实际使用的索引。如果为null,则没有使用索引。



key_len


索引字段最大可能使用长度



ref


显示索引的哪一列被使用了,如果可能的话,是一个常数。
指出对 key 列所选择的索引的查找方式,常见的值有 const, func, NULL, 具体字段名。当 key 列为 NULL ,即不使用索引时,此值也相应的为 NULL 。
列出是通过常量(const),还是某个表的某个字段(如果是join)来过滤(通过key)。


rows

MySQL所认为的它在找到正确的结果之前必须扫描的记录数。



Extra


其他信息,常见枚举:


Using index

此查询使用了覆盖索引(Covering Index),即通过索引就能返回结果,无需访问表。
若没显示"Using index"表示读取了表数据。


Using where

表示 MySQL 服务器从存储引擎收到行后再进行“后过滤”(Post-filter)。所谓“后过滤”,就是先读取整行数据,再检查此行是否符合 where 句的条件,符合就留下,不符合便丢弃。因为检查是在读取行后才进行的,所以称为“后过滤”。


Using temporary

使用到临时表


Using filesort

若查询所需的排序与使用的索引的排序一致,因为索引是已排序的,因此按索引的顺序读取结果返回,否则,在取得结果后,还需要按查询所需的顺序对结果进行排序,这时就会出现 Using filesort 。




猜你喜欢

转载自blog.csdn.net/xinzun/article/details/80134705
今日推荐