MySQL的ABC联合索引

建立了ABC联合索引

sql 复制代码
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'

上面查询语法的完全写法

简写 示例语法
ABC WHERE A = ? AND B = ? AND C = ?
A或B WHERE A = ? OR B = ?
A IN + B IN + C WHERE A IN (?, ?) AND B IN (?, ?) AND C = ?
A + B范围 + C WHERE A = ? AND B > ? AND C = ?
A前缀LIKE WHERE A LIKE 'abc%'
相关推荐
计算机毕设定制辅导-无忧学长2 小时前
《基于微信小程序健康习惯激励系统设计与实现》
java·spring boot·mysql·微信小程序·uniapp·健康习惯激励系统
Decay__3 小时前
15_MySQL 数据同步与迁移方案 —— 复制 / DataX / Canal / 异构同步(对标 Oracle GoldenGate)
运维·数据库·sql·mysql·架构
雪芽蓝域zzs4 小时前
第 2 章:整合 MySQL + MyBatis,搭建数据库基础、实体类、Mapper、测试查询
数据库·mysql·mybatis
余槐i5 小时前
Spring Boot 3.2 偶发500无日志:线程池复用导致请求上下文丢失
spring boot·redis·后端·mysql·性能优化
孤狼GPT5 小时前
ChatGPT、Codex数据库实战:MyBatis-Plus第一页查询正常,翻到第10000页为什么越来越慢?
mysql·chatgpt·mybatis-plus·codex·深分页
Decay__5 小时前
17_MySQL 监控体系构建 —— mysqld_exporter + Prometheus + Grafana 全栈实战
运维·数据库·sql·mysql·架构
Franciz小测测6 小时前
MySQL 增量备份实践:文件都在,为什么仍可能恢复失败?
数据库·mysql·binlog
幽灵诶17 小时前
Mysql(基于测试的学习)
数据库·mysql
宇宙无敌暴龙战士66618 小时前
MySQL 8 库表操作学习笔记:SQL 基础、库表管理、约束与用户授权全流程
数据库·sql·mysql·学习笔记·后端开发
猿究院_夏燊18 小时前
MySQL 的四种隔离级别
java·数据库·mysql