联合索引最左匹配

假设有联合索引 idx1(a,b,c)
 
下面的SQL可完整用到索引。
1.SELECT ... WHERE b=? AND c=? AND a=?;
2.SELECT ... WHERE b=? AND a=? AND c=?;
3.SELECT ... WHERE a=? AND b IN(?,?) AND c=?;
4.SELECT ... WHERE a=? AND b=? ORDER BY c;
5.SELECT ... WHERE a=? AND b IN(?,?) ORDER BY c;
6.SELECT ... WHERE a=?  ORDER BY b,c;
7.SELECT ... ORDER BY a,b,c;
 
而下面几个SQL则只能用到部分索引,或者可利用到ICP特性(5.6起)
1.SELECT ...WHERE b=? AND a=? --只能用到(a,b)部分。
2.SELECT ...WHERE a IN (?,?) AND b=?; --只用到(a,b) 部分,同时有ICP。
3.SELECT ...WHERE (a BETWEEN ? AND ?) AND b=?; --只用到(a,b) 部分,同时有ICP。
4.SELECT ...WHERE a=? AND b IN (?,?); --只用到(a,b)部分,同时有ICP。
5.SELECT ...WHERE a=? AND (b BETWEEN ? AND ?) AND c=?; --可用到(a,b,c)整个索引,同时有ICP。
6.SELECT ...WHERE a=? AND c=?;--只用到(a)部分索引,同时有ICP。
7.SELECT ...WHERE a=? AND c>=?;--只用到(a)部分索引,同时有ICP。
 
ICP(index condition pushdown)是MySQL5.6的新特性,其机制会让索引的其他部分也参与过滤,减少引擎层和server层之间的数据传输和回表请求,通常情况下可大幅提升查询效率。
 
 
下面几个SQL完全用不到索引
1.SELECT ...WHERE b=?;
2.SELECT ...WHERE b=? AND c=?;
3.SELECT ...WHERE b=? AND c>=?;
4.SELECT ...ORDER BY b;
5.SELECT ...ORDER BY b,a;
 

转载于:https://www.cnblogs.com/liang545621/p/9401460.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值