Mysql执行计划Explain类型字段说明

Explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。

type字段含义

type字段说明了查询语句的关联类型,更准确的说法是访问类型–换言之就是Mysql决定如何查找表中的行。
下面是最重要的访问方法,依次从差到最优: All -> Index -> range -> ref -> eq_ref -> const,system -> null

ALL

全表扫描,意味着Mysql必须扫描整张表的数据去找到需要的行。(使用LIMIT例外)

Index

这个跟全表扫描一样,只是Mysql扫描表时按照索引次序进行而不是行。主要优点是避免了排序。最大缺点是需要承担按照索引次序读取整个表的开销。这通常意味着若是按照随机次序访问行,开销将非常大。

如果在extra列中看到"Using index",说明Mysql 正在使用覆盖索引,它只扫描索引的数据,而不是按索引次序的每一行。它比按索引次序全表扫描的开销要少很多。

Range

范围扫描就是一个有限制的索引扫描,开始于索引的某一点,返回匹配这个值域的行。范围扫描是带有between或子句里面带有<>的查询。
此类扫描的开销跟索引类型相当,只是扫描的行记录少。

ref

这是一种索引访问(有时也叫做索引查找),它返回所有匹配某个单个值的行。然而,它可能找到多个符合条件的行,因此它是查找和扫描的混合体。
此类型索引只有当使用非唯一索引才会发生,把他叫做ref是因为索引要跟某个参考值比较。

eq_ref

使用这种索引查找,Mysql知道最多只返回一条符合条件的记录。这种访问可以在使用主键或者唯一性所有查找时看到。

const, system

当Mysql能对查询的部分进行优化并将其转换成一个常量时,它就会使用这种访问类型。
例如:通过将某一行的主键放入WHERE子句来选取此行的主键,Mysql能把这个查询转换成一个常量。

NULL

这种访问方式意味着Mysql能在优化阶段分解查询语句,在执行阶段甚至用不着再访问表或者索引。
例如从一个索引列里面选取最小值可以通过单独查找索引来完成,不需要在执行时访问表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值