• 数据库索引失效


            索引失效是指数据库查询在执行过程中无法有效利用索引,导致查询性能下降或索引无法被使用的情况,以下是常见的导致索引失效的原因:

     模糊查询以通配符开头,自己都不知道具体要查什么,怎么使用索引呢,所以会导致索引失效。

    1. -- 1.模糊查询时,以通配符开头的(type = All 表示进行全表扫描)索引会失效
    2. EXPLAIN SELECT * FROM north_american_box_office WHERE zhongwenpianming LIKE '%子%'
    3. -- 如果不是通配符开头,可以使用索引(type = range 表示查询使用了范围扫描(Range Scan))
    4. EXPLAIN SELECT * FROM north_american_box_office WHERE zhongwenpianming LIKE '狮子%'
    5. -- 如果是等号则直接使用索引(type = ref 表示使用非唯一索引读取)
    6. EXPLAIN SELECT * FROM north_american_box_office WHERE zhongwenpianming='狮子王'

            组合索引不包含首字段,其实和模糊查询以通配符开始的原因差不多,不包含首字段无法触发该组合索引。

    1. -- 2.组合索引,如果不包含组合索引的第一个字段则不会走索引
    2. -- 当查询的数据符合要求的很多,全表查询的效率大于索引的效率,则会走全表扫描(特殊情况)
    3. -- 创建一个组合索引
    4. CREATE INDEX index_tianshu_piaofang ON north_american_box_office
    5. (shangyingtianshu, leijipiaofang);
    6. -- 索引有效
    7. EXPLAIN SELECT * FROM north_american_box_office
    8. WHERE (shangyingtianshu BETWEEN 3 AND 5) AND leijipiaofang >= 5000
    9. -- 索引失效(由于没有组合索引的第一个字段造成)
    10. EXPLAIN SELECT * FROM north_american_box_office
    11. WHERE leijipiaofang >= 5000
    12. -- 索引失效(由于查询的符合条件的数据体量较大)
    13. EXPLAIN SELECT * FROM north_american_box_office
    14. WHERE (shangyingtianshu BETWEEN 3 AND 15) AND leijipiaofang >= 500

             使用OR关键字进行查询时,如果有一个条件没有索引,则索引失效。

    1. -- 3.如果 OR 前后的两个条件的列都是索引,那么查询中将使用索引;
    2. -- 如果 OR 前后有一个条件的列不是索引,那么查询中将不使用索引。
    3. -- 索引失效(累计票房没有索引,因为它不是组合索引的第一个字段)
    4. EXPLAIN SELECT * FROM north_american_box_office
    5. WHERE zhongwenpianming LIKE '狮%' OR leijipiaofang >= 5000
    6. -- 索引有效(中文片名和上映天数(组合索引中的第一个字段)都有索引)
    7. EXPLAIN SELECT * FROM north_american_box_office
    8. WHERE zhongwenpianming LIKE '狮%' OR shangyingtianshu BETWEEN 90 AND 100

            使用函数进行查询

    1. -- 4.查询语句中使用函数
    2. EXPLAIN SELECT * FROM north_american_box_office
    3. WHERE LENGTH(zhongwenpianming) = 9

  • 相关阅读:
    超大文本查看器
    各种存储性能瓶颈分析与优化方案
    基于数据驱动的成本洞察,趣丸科技的FinOps进阶之路~
    学习笔记17--国内网联车上路的测试政策
    CentOS8迁移tencentOS实践
    腾讯云学生用户专享优惠活动汇总
    筛选日志并生成序列化文件
    Unity C#随笔:关于GC(垃圾回收)
    2023 年 数维杯(D题)国际大学生数学建模挑战赛 |数学建模完整代码+建模过程全解全析
    【ESP32】 OTA 升级简述与 Flash 分区介绍
  • 原文地址:https://blog.csdn.net/qq_72172339/article/details/133376963