码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 索引失效的 12 种情况


    目录

    一、未使用索引字段进行查询

    二、索引列使用了函数或表达式

    三、使用了不等于(!= 或 <>)操作符

    四、LIKE 操作符的模糊查询

    五、对索引列进行了数据类型转换

    六、使用 OR 连接多个条件

    七、表中数据量较少

    八、索引列上存在大量重复值

    九、数据分布不均匀

    十、索引列上存在过多的 NULL 值

    十一、索引字段与排序字段不匹配

    十二、索引列进行了隐式类型转换


    索引失效是指数据库中的索引无法有效地加速查询操作,导致查询性能下降。索引失效的情况主要包括以下几种:

    一、未使用索引字段进行查询

    • 当查询条件中不包含索引字段时,数据库无法利用索引来加速查询,导致索引失效。
    • 例如,如果一个表的索引是在 user_id 字段上建立的,但是查询时使用了 name 字段作为条件,那么索引就会失效。

    二、索引列使用了函数或表达式

    • 如果查询条件中对索引列使用了函数、类型转换或者表达式,数据库无法直接使用索引,而是需要先计算表达式的值,然后再进行查询,这会导致索引失效。
    • 例如,如果对 date_created 字段进行了函数操作,如 DATE_FORMAT(date_created, '%Y-%m-%d') = '2022-01-01',那么索引可能会失效。

    三、使用了不等于(!= 或 <>)操作符

    • 对于不等于操作符,数据库通常无法利用索引进行加速查询,因为索引是按照排序顺序组织的,而不等于操作符无法利用索引的排序特性。
    • 例如,SELECT * FROM table WHERE status != 'completed',这种情况下索引可能会失效。

    四、LIKE 操作符的模糊查询

    • 对于 LIKE 操作符进行的模糊查询,如果通配符放在索引列的开头,数据库无法利用索引,导致索引失效。
    • 例如,SELECT * FROM table WHERE name LIKE '%keyword%',这种情况下索引可能会失效。

    五、对索引列进行了数据类型转换

    • 如果查询条件中对索引列进行了数据类型转换,数据库可能无法利用索引,导致索引失效。
    • 例如,如果索引是在 age 字段上建立的,但是查询时对 age 进行了类型转换,如 CAST(age AS CHAR) = '18',那么索引可能会失效。

    六、使用 OR 连接多个条件

    • 当查询条件中使用了 OR 连接多个条件时,如果其中至少一个条件无法利用索引,整个查询可能会导致索引失效。
    • 例如,SELECT * FROM table WHERE status = 'completed' OR amount > 1000,这种情况下索引可能会失效。

    七、表中数据量较少

    • 当表中的数据量较少时,数据库可能会选择全表扫描而不是利用索引,因为全表扫描的开销相对较小,这也可能导致索引失效。

    八、索引列上存在大量重复值

    • 当索引列上存在大量重复值时,数据库可能会认为使用索引并不能显著提高查询性能,因此选择不使用索引,导致索引失效。
    • 例如,如果索引是在布尔类型的 is_active 字段上建立的,而且大部分记录的值都是相同的,那么索引可能会失效。

    九、数据分布不均匀

    • 如果索引列的数据分布不均匀,即某些值出现的频率远高于其他值,数据库可能会选择不使用索引,导致索引失效。
    • 例如,如果在一个性别字段上建立了索引,但是大部分记录的性别都是相同的,那么索引可能会失效。

    十、索引列上存在过多的 NULL 值

    • 当索引列上存在过多的 NULL 值时,数据库可能会认为使用索引并不能提高查询性能,因为索引无法存储 NULL 值,导致索引失效。
    • 例如,如果在一个可选的电话号码字段上建立了索引,而大部分记录的电话号码都是 NULL,那么索引可能会失效。

    十一、索引字段与排序字段不匹配

    • 如果查询中使用了 ORDER BY 子句,而排序字段与索引字段不匹配,数据库可能会选择不使用索引,导致索引失效。
    • 例如,如果在 created_at 字段上建立了索引,但是查询中排序字段是 updated_at,那么索引可能会失效。

    十二、索引列进行了隐式类型转换

    • 当查询条件中对索引列进行了隐式类型转换时,数据库可能无法利用索引,导致索引失效。
    • 例如,如果索引是在整数类型的 id 字段上建立的,但是查询时传入的是字符串类型的值,那么索引可能会失效。

  • 相关阅读:
    STM32测温枪
    视频讲解|1033含sop的配电网重构(含风光可多时段拓展)
    SANs证书是什么?
    【Opencv入门到项目实战】(九):项目实战|信用卡识别|模板匹配|(附代码解读)
    【FreeCodeCamp】 ResponsiveWebDesign网页设计 测试1学习笔记
    java根据word模板生成文档(含文本替换和动态生成表格)
    mysql索引性能分析(sql执行频率、慢日志分析、sql效率分析工具 profile、explain)
    推特自动发帖,快速提升人气
    记一次 .NET 某餐饮小程序 内存暴涨分析
    nlp之文本转向量
  • 原文地址:https://blog.csdn.net/qq_45110186/article/details/136160598
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号