Mysql索引失效问题

mysql索引有时候会失效,比如大于号右边的索引会失效,使用like索引会失效。

这时候需要了解到联合索引
在这里插入图片描述
我们可以看到以a字段排列是有序的 1-2-3这样子
但是以b字段排序就是无序的 1-2-4-8-1-2
是因为b字段排序是基于a字段排序的,a字段如果相同就比对b字段 再将a相同的字段根据b字段排序

最佳左前缀法则:
在这里插入图片描述
假设user_id是作为联合查询的a字段,user_country是b字段
那么第一条sql语句就可以使用到索引 因为a是有序的 b在有a的情况下也是有序的
第二条sql语句少了作为a字段的user_id 那么b字段在没有a 的情况下就是无序 的 ,无序就无法二分查找,那么就会进行全盘扫描

还有一种范围查找的索引失效问题
在这里插入图片描述
假设我们查找这个a字段大于1的数据 那么它就会找到后面四个 由于a字段没有限定区间导致b字段无序(a相等时b再排序)
这样就会失效,但是把user_id>1换成user_id=1的话 这样子就可以使用到索引 因为a相等了 b是有序的

like失效
我们使用like有时会用到’%a%’ | ‘a%’|’%a’ 这种分别称之为中缀 前缀 后缀
一般只有前缀可以使用到索引
因为根据最佳左前缀法则来说 字符串的排序是根据26个字母的顺序来排序 假如第一个字符相等就会排序第二个字符这样子
后缀用不到是因为你没有根据前面字符排序 导致后面的字符是无序的 无序就肯定不能用啦
中缀和后缀的原理是一样的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值