EXPLAIN之type、Extra

在我们使用explain命令对sql语句进行优化时,有一些参数比较重要但也有点不容易理解。接下来就对他们分别进行介绍。

1. type

type表示此次sql语句的访问类型,可以从总体上反应该语句的运行情况。

从最好到最差依次是:system>const>eq_ref>ref>range>index>ALL

一般来说,查询要至少达到range级别,最好达到ref

  • system:表只有一行记录(等于系统表),这是const类型的特例,平时不会出现,这个也可以忽略不计。

  • const:表示通过索引一次就找到了,const用于比较primary key或者unique索引。因为只匹配一行数据,所以很快。如将主键置于where列表中,MySQL就能将该查询转化为一个常量。

  • eq_ref唯一性索引扫描,读取本表中和关联表表中的每行组合成的一行,查出来只有一条记录。除 了 system const 类型之外, 这是最好的联接类型。

  • ref非唯一性索引扫描,返回本表和关联表某个值匹配的所有行,查出来有多条记录

  • range:只检索给定范围的行,一般就是在WHERE语句中出现了BETWEEN< >in等的查询。这种范围扫描索引比全表扫描要好,因为它只需要开始于索引树的某一点,而结束于另一点,不用扫描全部索引。

  • indexFull Index Scan,全索引扫描,indexALL的区别为index类型只遍历索引树。也就是说虽然ALLindex都是读全表,但是index是从索引中读的,ALL是从磁盘中读取的。

  • ALLFull Table Scan,没有用到索引,全表扫描。

这里着重解释一下indexall

index表示在进行数据查询时,其实我们也用不到index来直接帮助我们快速找到所需的数据。我们也需要进行遍历,但由于该数据列我们创建了索引,因此我们可以遍历索引,不需要遍历数据表。索引的大小通常比整个表要小得多,I/O操作次数也会减少,那么就会有更快的查询速度。

2. Extra

Extra包含不适合在其他列中显示但十分重要的额外信息。

  • Using filesort:说明MySQL会对数据使用一个外部的索引排序,而不是按照表内的索引顺序进行读取。MySQL中无法利用索引完成的排序操作成为"文件内排序"。
  • Using temporary:使用了临时表保存中间结果,MySQL在対查询结果排序时使用了临时表。常见于排序order by和分组查询group by临时表対系统性能损耗很大。
  • Using index:表示相应的SELECT操作中使用了覆盖索引,避免访问了表的数据行,效率不错!如果同时出现Using where,表示索引被用来执行索引键值的查找;如果没有同时出现Using where,表明索引用来读取数据而非执行查找动作。
  • Using where:表明使用了WHERE过滤。
  • Using join buffer:使用了连接缓存。
  • impossible whereWHERE子句的值总是false,不能用来获取任何元组。

在extra中,通常我们需要解决Using filesortUsing temporary

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值