mysql索引失效的几种情况

1、没有遵循索引最左原则。
	建立几个复合索引字段,最好就用上几个字段。
2、最佳左前缀法则
	如果索引了多列,要遵守最左前缀法则,指的是查询从索引的最左前列开始,可以跳过但是尽量不跳过索引中间的列。
3、不再索引列上做任何操作(计算、函数、(自动or手动)类型转换),会导致索引失效而转向全表扫描
4、存储引擎不能使用索引中范围条件右边的列。(范围之后全失效)
	若中间索引列用到了范围(><like等),则后面的索引全失效
	范围 若有索引则能使用到索引,范围条件右边的索引会失效(范围条件右边与范围条件使用的同一个组合索引,右边的才会失效。若是不同索引则不会失效)

5、Mysql在使用不等于(!=<>)like的左模糊的时候无法试用索引会导致全表扫描
6IS NULLIS NOT NULL也无法使用索引
7、字符串不加单引号索引失效,因为这里有一个隐式的类型转换操作,更严重会导致行锁变表锁,降低SQL效率
8or,用它来连接时会索引失效,所有索引都失效 要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引


 假设index(a,b,c)
Where语句
索引是否被使用
where a = 3
Y,使用到a
where a = 3 and b = 5
Y,使用到a,b
where a = 3 and b = 5 and c = 4
Y,使用到a,b,c
where b = 3 或者 where b = 3 and c = 4  或者 where c = 4
N
where a = 3 and c = 5
使用到a, 但是c不可以,b中间断了
where a = 3 and b > 4 and c = 5
使用到a和b, c不能用在范围之后,b后断了
where a = 3 and b like 'kk%' and c = 4
Y,使用到a,b,c
where a = 3 and b like '%kk' and c = 4
Y,只用到a
where a = 3 and b like '%kk%' and c = 4
Y,只用到a
where a = 3 and b like 'k%kk%' and c = 4
Y,使用到a,b,c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值