mysql explain extra_Mysql Explain Extra

内容

extra 是使用EXPLAIN后非常重要的一组信息,这里我将列举一下它所包含的内容

Using filesort

说明mysql会对数据使用一个外部的索引排序,而不是按照表内的索引顺序进行读取。MySQL中无法利用索引完成的排序操作称为”文件排序”

这个要在什么情况下出现呢?

比如我为a表建立了索引,使用的是a表中的a1和a2字段,这个时候

// 首先为a建立索引

create index a1_a2 on a(a1,a2)

// 将a2作为条件排序

select * from a order by a2

这个时候就会出现上面的文件排序——既建立了索引,但是索引是复合索引,条件第一是a1,而如果直接使用a2作为排序条件,那么索引是失效的,因此会通过using filesort告诉用户这个索引的排序不被使用

using temporary

如果出现了这个,那么说明情况很糟糕,表示数据库通过建立临时表将数据保存在临时表中。临时表是个中间过程,要创建然后销毁,这个过程是非常慢的。常见于使用了order by或者group by后面

下面我们就来看看什么情况下会出现使用临时表的情况

d6e2b63dd7b3

image.png

首先,我们可以看到这个建立的索引是col1,col2,col3这样的一个顺序,而第一条语句中直接group by col2,这样做建立的索引就完全没用,而且,这个过程要建一张临时表来存储group

using index

表示相应的select操作中使用了覆盖索引(Covering Index),避免访问了表的数据行,效率不错!

如果同时出现using where,表明索引被用来执行索引键值的查找;

如果没有同时出现using where,表明索引用来读取数据而非执行查找动作。

覆盖索引:就是select的数据列只用从索引中就能够取得,不必读取数据行,MySQL可以利用索引返回select列表中的字段,而不必根据索引再次读取数据文件,换句话说查询列要被所建的索引覆盖。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值