索引失效的场景主要有那些

1、不满足最左匹配原则

当使用联合索引时,查询条件没有从最左索引列开始,或者跳过了索引中的列,那么索引可能会失效。例如,对于联合索引(sex, age, name),如果查询条件只包含了sex和name而没有age,那么索引可能不会被使用。

2、在索引列上使用函数

如果在索引列上使用了函数或表达式,那么索引可能会失效。例如,使用SUBSTR、DECODE、INSTR等函数对索引列进行运算。

3、查询条件使用了非索引列

如果查询条件中的列没有被索引,那么索引自然不会被使用。

4、使用了全表扫描

当查询的数据量非常大,或者查询条件导致索引无法被有效使用时,数据库可能会选择进行全表扫描,此时索引会失效。

5、使用了NOT IN、NOT EXISTS、<>等操作符

这些操作符在查询时可能会导致结果集很大,数据库可能会选择不使用索引而进行全表扫描。

6、使用了LIKE操作符并且百分号在前

如LIKE "%abc",这样的查询条件不能有效地利用索引,因为需要扫描所有行来确定哪些行匹配。

7、单独引用复合索引里非第一位置的索引列

对于复合索引,如果查询条件只引用了非第一位置的索引列,那么索引可能不会被使用。

8、字符型字段为数字时在WHERE条件里不添加引号

这可能会导致数据库将数字与字符型字段进行隐式转换,从而无法有效利用索引。

9、变量类型不匹配

例如,当变量采用的是times变量,而表的字段采用的是date变量时,或者相反情况,可能会导致索引失效。

10、ORDER BY语句中没有加WHERE或LIMIT关键字

如果ORDER BY语句中没有加WHERE或LIMIT关键字,数据库可能会选择全表扫描来满足排序需求,此时索引会失效。

相关推荐
Ethan01072 分钟前
详解Spring 事务三大核心接口,以及我们能用它来做什么
spring
唐青枫17 分钟前
Java Gradle 实战指南:从 Wrapper、Kotlin DSL 到 Spring Boot 多模块构建
java·kotlin·gradle
wuqingshun31415919 分钟前
如何理解Spring Boot中的starter?
java·spring boot·后端
带刺的坐椅20 分钟前
Solon TeamAgent 协作协议:从 SEQUENTIAL 流水线到 HIERARCHICAL 主管团队
java·ai·llm·agent·solon
wuqingshun31415928 分钟前
SpringBoot是如何实现自动配置的
java·spring boot·后端
用户0537040314331 分钟前
我的学习记录泛型
java
zhouhui00133 分钟前
AI帮我写了个Spring Boot校验,线上漏掉了这组边界条件
java·spring boot·redis·ai编程
JRedisX40 分钟前
Java从零手写企业级内存数据库
java
萧瑟余晖42 分钟前
JDK 20 新特性详解
java·开发语言
hdsoft_huge1 小时前
SpringBoot系列17:日志体系Logback配置,日志分割、脱敏、异常堆栈收集规范(生产级落地)
java·spring boot·logback