MySql explain结果extra字段含义自测

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

凡凡轶崔

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

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

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

打赏作者

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

抵扣说明:

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

余额充值