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

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关键字,数据库可能会选择全表扫描来满足排序需求,此时索引会失效。

相关推荐
Pniubi5 小时前
HashMap的扩容和树化边界
java·开发语言
Mikko76 小时前
用 Java 复刻了高中时在塞班上玩的「熔岩矿车」:纯 Swing、零依赖、没有一张图片,一个 jar 双击就能玩
java·游戏开发·swing
知了学历孙老师6 小时前
小自考的校考和统考,出题方和难度差在哪
java·大数据·前端
Java爱好狂.6 小时前
Java初学者如何一周速通SpringBoot!
java·spring boot·后端·spring·高并发·架构师·java面试
秋饼7 小时前
LLM API密钥动态轮换实战:Spring Vault + Spring AI + 多Provider路由
java·ai·技术分享·后端开发
福兮说8 小时前
JSON 格式正确,数据就可靠吗?我用一份自编配置检查类型与空值
java·前端·json
紧跟先前的步伐10 小时前
Go AI Agent 实战 03|Token、上下文窗口与模型调用成本
java·人工智能·golang
const_qiu10 小时前
第四章 00:开篇 —— 从「会聊天」到「记得住、会干活、能协作」
java·开发语言·人工智能·python
Wang's Blog10 小时前
Java 项目实战: 交友项目 - 个人资料管理的更新接口实现与坑
java·开发语言·交友
Promising_GEO10 小时前
GEE实战02期:从卫星波段开始:利用 Sentinel-2 自己计算 NDVI
java·sentinel·遥感·空间分析