MySQL的ABC联合索引
2026/7/5 3:49:48 网站建设 项目流程

建立了ABC联合索引

INDEX idx_abc (A, B, C)

各种查询条件是否会走ABC联合索引,核心在于查询条件是否满足最左前缀匹配原则(查询条件必须从索引最左列开始连续匹配

查询条件简写是否可能走idx_abc实际利用程度说明(是否满足最左前缀)
A用到 A满足
B不会不用不满足,缺少最左列 A
AB用到 A、B满足,连续命中前两列
AC

用到A,

MySQL 5.6 以前C不能用于连续定位,5.6+ 可能通过 ICP 在索引层过滤

不满足,因为跳过了B,所以不能完整利用(A,B,C)

5.6 前通常在 Server 层判断C

5.6+ 可能在存储引擎层先判断C,从而减少回表;是否回表取决于是否覆盖索引

BC不会不用不满足,缺少最左列 A
ABC用到 A、B、C满足,完整命中
CBA用到 A、B、C满足,优化器会重排为ABC,ABC满足
A或B不一定

用到 A,会用B

用不到A,则后面也不用

比较复杂,OR逻辑要拆成两个分支看:

A=?分支满足最左前缀,

B=?分支不满足最左前缀;因此整体是否走联合索引不稳定

A或A用到 A满足,类似A IN (...)
A IN + B用到 A、B满足,IN可视为多个等值匹配

A IN +

B IN + C

一般可用 A、B、C满足,都是等值匹配,较友好
A范围用到 A 范围满足,从 A 开始做范围扫描
A范围 + B主要用 A满足,A 已经是范围,B 通常不能继续精确定位
A + B范围用到 A、B满足,B 作为范围条件
A + B范围 + C用到 A、B,C 多数过滤满足,B 范围之后,C 通常不能继续定位
A前缀LIKE用到 A 范围满足,如A LIKE 'abc%'
A后缀LIKE不会不用不满足,如A LIKE '%abc'

上面查询语法的完全写法

简写示例语法
ABCWHERE A = ? AND B = ? AND C = ?
A或BWHERE A = ? OR B = ?
A IN + B IN + CWHERE A IN (?, ?) AND B IN (?, ?) AND C = ?
A + B范围 + CWHERE A = ? AND B > ? AND C = ?
A前缀LIKEWHERE A LIKE 'abc%'

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询