当前位置: 首页 > news >正文

最佳左前缀法则(Optimal Left-Prefix Rule)

一、举例

表A有索引index (a,b,c)有三个字段,

select * from A where c = '1' ,不会走index索引;

select * from A where b =‘1’ and c ='2' 也不会走index索引;

select * from A where a=‘0’ and b='1' ,索引部分生效;

select * from A where a=‘0’ and b='1'  and c='2',索引生效。

二、定义与原理

        最佳左前缀法则指的是在创建和使用复合索引时,查询条件应该尽量包含从索引最左边开始的一个或多个连续列。换句话说,如果一个复合索引是按照列A, 列B, 列C的顺序创建的,那么最优的查询将包括列A(单独使用或与其他列组合),其次是列A和列B的组合,最后是列A、列B和列C的组合。如果查询只涉及列B或列C而不包括前面的列A,则无法有效利用该复合索引。

        这一原则背后的逻辑在于B树(或其他类似的平衡树结构)索引的工作原理:它们按照索引键的顺序组织数据,而复合索引的键是由多个列组成的。因此,只有当查询能够匹配到索引的最左侧部分时,数据库引擎才能有效地遍历索引树来查找匹配的记录。

三、特殊情况

        select * from A where c='2' and b='1' and a=‘0’ 会走索引吗?

        会走索引,且能充分利用该联合索引。

原因分析:

        1.联合索引的本质
联合索引 (a, b, c) 是按 a→b→c 的顺序构建的 B+ 树,索引节点先按 a 排序,相同 a 再按 b 排序,相同 b 最后按 c 排序。

        2.查询条件的适配性
虽然查询条件中 c、b、a 的顺序与索引定义的 a、b、c 不同,但 MySQL 优化器会自动调整 WHERE 子句中 AND 连接的条件顺序,使其与索引的字段顺序匹配(因为 AND 条件的逻辑顺序不影响结果)。
优化后等价于 WHERE a='0' AND b='1' AND c='2',完全符合联合索引的最左前缀原则,且是精确匹配(=),因此能高效利用整个联合索引。

http://www.dtcms.com/a/320152.html

相关文章:

  • 【Dijkstra】 Shortest Routes I
  • 5种将Android联系人传输到电脑的方法
  • 《C语言》函数练习题--4
  • Debain12 api方式部署redis服务
  • 【高等数学】第八章 向量代数与空间解析几何——第二节 数量积 向量积 混合积
  • 耐压击穿测试在不同行业中的具体应用有哪些差异?
  • Clock斗篷技术:助力跨境电商营销推广的智慧策略
  • 当文档包含表格时,如何结合大模型和OCR提取数据?
  • C语言指针:补充
  • Day 34:GPU训练与类的call方法
  • [特殊字符] 未来图钉式 AI 时代的智能生态布局:副脑矩阵与人机共振的系统构想
  • USB2.0 和 USB3.0 枚举对比
  • 数据标注之数据集的类型与如何标注
  • Ubuntu24.04的“errors from xkbcomp are not fatal to the X server”终极修复方案
  • 【驱动】RK3576-Debian系统使用ping报错:socket operation not permitted
  • 3_steels_detect_CSDN_20250807_165405
  • spring cache(二)核心接口
  • Claude Code MCP 网络搜索配置命令
  • Qwen3-235B-A22B-Instruct-2507模型介绍
  • 【更新被拒绝,因为推送的一个分支的最新提交落后于其对应的远程分支。】
  • 【网络编程】一请求一线程
  • 【洛谷题单】--分支结构(一)
  • 《网络空间测绘技术白皮书》
  • Docker容器强制删除及文件系统修复完整指南
  • 8. 字符串转换整数 (atoi)
  • 大模型LL04 微调prompt-Tuning方法入门(背景与发展)
  • 【自动驾驶】《Sparse4Dv3》代码学习笔记
  • Redis的五个基本类型(2)
  • 单页面应用(SPA)和多页面应用(MPA)
  • RP2040下的I2S Slave Out,PIO状态机(三)