SQL索引失效的几种情况

本文探讨了SQL索引在不同情况下可能失效的八种情形,包括:未正确使用复合索引、范围查询中右侧列的索引无效、对索引列进行运算、字符串类型查询未加单引号、`SELECT *`可能导致的失效、`OR`操作符前后字段索引问题、`LIKE`模糊查询的索引使用以及`IN`、`NOT IN`、`NULL`、`NOT NULL`条件下的索引效果。了解这些情况有助于优化SQL查询性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、 没有正确使用复合索引

例如我们根据user表中的A,B,C创建一个符合索引

create index on user(A,B,C)

实际上mysql是为我们创建了三个索引

  1. A
  2. AB
  3. ABC

假如你从B 或者C 开始查 就没有用到索引

select B from user while B = ‘b’
2、范围查询右边的列使用索引无效
select A from user where C > 1 and A = 'a'
3、对索引列进行运算,索引失效
select A from user where subString(A,3,2) = '科技'
4、字符串类型没有加 ’ ', 索引失效

在查询中,没有对字符串加单引号,MySQL的查询优化器,会自动的进行类型转化,造成索引失效

5、select * 可能导致失效

查询全部的字段,有一些字段可能没有建立索引,导致需要去表中查询,所以会导致索引失效

6、or 前后字段有一个没有建立索引,另外一个索引也失效
7、模糊查询 like
  • 尾部模糊匹配,like ‘某某值 %’ ,索引不失效
  • 头部模糊匹配,like ‘% 某某值’ ,索引失效
8、in , no in ,null ,not null 有时候

因为我们索引的目的是为了快速定位,如果值全是null 这个时候,索引就没有意义,直接走全表查询,如果只有一个null ,那就可以快速的定位出来

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值