sql操作符与索引失效

先记一笔以后补充

问题:

操作符 IN/EXISTS/LIKE/NOT IN/OR/BETTWEEN...AND哪些会引起索引失效?

一.BETTWEEN…AND

会使用索引,但是需要注意的是它相当于"XXX>=num1 and XXX<=num2",包含等号。

二.LIKE

当like后边跟的是右百分,即'zhangsan%'或'zhang%san%'时都是使用索引的,
当like后边跟字符串最左边带左百分号时,即'%zhangsan'或'%zhangsan%'时,
索引会失效,
所以尽量不使用左百分,如果一定要用左百分使用覆盖索引可以提高效率。
mysql中测试

测试用表
测试用表

表上索引
表上索引

like测试结果
like测试结果

三.IN

in的使用先上示例

作用于主键列时
作用于主键列时

作用于非主键列时
作用于非主键列时

个人理解:
当in作用于主键列时会使用索引,所以条件是主键时可以使用;
当不是主键列最好不用使用in,极有可能导致索引失效
(比如:in里边的值表中不存在时,in里的一个值在表中有多行匹配时)。
所以很多人说不要使用in也不是没有道理。

四.NOT IN

使用not in索引失效。

五.EXISTS

主要是内层循环会用到索引,外层循环不对应查询列。

六.OR

与in的情况差不多。在主键列上可以,但非主键列索引失效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值