MySQL最左匹配原则是什么

MySQL 索引的最左匹配原则是指在使用联合索引的过程中,查询条件必须从索引的最左侧开始匹配。如果联合索引包含多个列,查询条件必须包含第一个列,然后是第二个列,以此类推。
底层原理:联合索局部有序。比如建立联合索引 (a,b),b只在a为确定值时有序,在全局则乱序。

示例

为 (a,b,c) 建立联合索引

等值查找

以下符合联合索引

sql 复制代码
where a = 1
where a = 1 and b = 1
where a =1 and b = 1 and c = 1

以下不符合联合索引

sql 复制代码
where b = 1
where c = 1
where b =1 and c = 1

以下可能符合联合索引

sql 复制代码
where a = 1 and c =1

在5.6版本之前,只有 a = 1 这个条件可以用上索引。在 5.6 版本后有个优化,即索引下推,可以在引擎层面查询 a = 1 的数据后判断 c = 1,将筛选后的结果再返回到 server 层

范围查找

如果遇到范围查找 ( < , > ) 就会停止匹配

sql 复制代码
where a > 1 and b = 1 and c = 1

上面 a > 1 可以用到联合索引,b 和 c 无法用到,因为在 a > 1 的整体上 b 和 c 是无序的

如果遇到如 >=、<=、BETWEEN、前缀like(xx%)的范围查询,则不会停止匹配。

sql 复制代码
where a >= 1 and b = 1 and c = 1

以上查询等价于下面两条总和

sql 复制代码
where a = 1 and b = 1 and c = 1
where a > 1 and b = 1 and c = 1

在 a = 1 时,b,c 可以用到联合索引,在 a > 1 时 b,c无法用到联合索引

相关推荐
底层玩家老张30 分钟前
数据库上K8s,运维为什么反而更累了?从StatefulSet到Operator的复盘
数据库·kubernetes·operator·数据库运维·架构选型
Tisfy1 小时前
LeetCode 2058.找出临界点之间的最小和最大距离:遍历+遇到极值则更新(这种题谁空间复杂度不是O(1)啊)
linux·数据库·leetcode·链表·题解·模拟·遍历
数据库小学妹1 小时前
MySQL死锁排查:锁机制原理、死锁日志与information_schema定位
运维·数据库·mysql
2601_967338711 小时前
Text2SQL智能体基础到实战课程
数据库·oracle
CadeCode1 小时前
Oracle 逗号拼接字段处理
数据库·后端·性能优化
Sirens.1 小时前
MySQL数据库:视图
数据库·mysql
山岚的运维笔记1 小时前
mysql 专业笔记 -- 第 1 章:MySQL 入门
运维·数据库·笔记·后端·学习·mysql·dba
IT小白杨1 小时前
TikTok小店防封号浏览器实战:2026年多店铺环境隔离与账号安全运营技术解析
开发语言·数据库·安全·php·chrome devtools·指纹浏览器
祢真伟大1 小时前
Oracle含LOB大字段表的存储占用统计
数据库·oracle
Inhand-Victor2 小时前
从 CAN 总线到 AWS IoT:EC312 边缘计算网关实现 CAN 数据云端接入
数据库