MySql explain结果extra字段含义自测

本文解析了MySQL查询优化器EXPLAIN输出中的Extra字段含义,包括using index、using where等常见标识符,详细介绍了它们的工作原理及应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

using index :性能好,索引覆盖,只从索引文件中获取,无需回表查询

using where:在查找使用索引的情况下,条件查找中需要回表去查询所需的数据

using index condition:在5.6版本后加入的新特性:使用了ICP(Index Condition Pushdown)技术,在存储引擎层根据索引尽量过滤符合where条件的记录,减少返回server层的记录。是需要回表的。eg:有索引(a, b, c) select a,c,d from TABLE where a=1000 and c=2000 根据最左匹配,where中的条件只能走a,使用索引下推技术根据c筛选,而d字段不在索引内,所以需要回表,但是where中的条件都在索引内,不需要use where。

using index & using where:查找使用了覆盖索引,又因为需要的数据、条件列都在索引中能找到,所以不需要回表查询数据 。但是where中的条件不能正常完全走索引,使用类似索引下推的筛选,故会显示use where 来进行条件筛选。eg:有索引(a, b, c) select a,b from TABLE where a=1000 and c=2000;根据最左匹配,故只能走a,但是using index & using where会使用索引下推,将满足符合判断c的列筛选出,又因为取得数据均在索引内有,故不需要回表。

using index condition & using where:

①出现于使用索引下推,且需要查询的字段不够即不是覆盖索引,但where中还有其他条件 eg:有索引(a, b,c),select a,c,d from TABLE where a=1000 and c=2000 and d=3000;根据最左匹配,只能走a,使用索引下推使用c字段筛选,故使用 use index condition。但是where中的条件并不都在索引内,d需要回表查询,故使用use where

②出现于group by操作中,条件走了一部分索引,group by也可以走索引,但是仍需回表取其他字段。eg:有索引(a,c) select c,count( id ) from TABLE where a=1000 and b=2000 group by c; 根据最左匹配,理论上只能走a,但是走c是可以使引擎不自己进行排序的,故引擎选择走c。又因为c不是做的值判断能操作,故显示use index condition。又因为查询条件中有b,而索引中没有b,故需要use where

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Deamon Tree

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值