最佳左前缀法则(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',完全符合联合索引的最左前缀原则,且是精确匹配(=),因此能高效利用整个联合索引。

相关推荐
韩立学长1 小时前
【开题答辩实录分享】以《自助游网站的设计与实现》为例进行选题答辩实录分享
java·mysql·spring
SAP小崔说事儿1 小时前
在数据库中将字符串拆分成表单(SQL和HANA版本)
java·数据库·sql·sap·hana·字符串拆分·无锡sap
川贝枇杷膏cbppg2 小时前
asmcmd
数据库·oracle
JIngJaneIL3 小时前
基于java+ vue助农电商系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
q_19132846953 小时前
基于Springboot+MySQL+RuoYi的会议室预约管理系统
java·vue.js·spring boot·后端·mysql·若依·计算机毕业设计
IndulgeCui3 小时前
基于CentOS7 DM8单机部署配置记录-20251216
数据库
surtr13 小时前
关系代数与关系型数据库
数据库·sql·数据库系统
学海_无涯_苦作舟3 小时前
MySQL面试题
数据库·mysql·面试
老邓计算机毕设4 小时前
SSM校内二手书籍交易系统的设计与实现an1k0(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架·ssm 框架开发·ssm 校内二手书籍交易系统
天行健,君子而铎4 小时前
高性能、可控、多架构:教育行业数据库风险监测一体化解决方案
数据库·架构