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无法用到联合索引

相关推荐
李兆龙的博客1 小时前
问津集 #26:Lakebase——Postgres 的版本化页面存储、数据库分支与计算弹性
数据库
倔强的石头_3 小时前
聊聊金仓KFS:一款把数据同步软件做扎实的产品
数据库
闲云野鹤在人间3 小时前
MySQL|从理论、安装、备份到主从复制、MHA高可用详解
linux·运维·数据库·mysql·云计算
禾小西3 小时前
Redis:从两大维度和三大主线建立知识体系
数据库·redis·缓存
禾小西4 小时前
Redis 数据结构:快速的 Redis 有哪些慢操作?
数据结构·数据库·redis
数据库小学妹4 小时前
数据共享交换平台选型:交换方式对比与避坑指南
数据库·信创·数据同步·数据交换平台·政务数据共享·数据共享交换平台·数据库底座
要开心吖ZSH5 小时前
MySQL 慢 SQL 排查操作手册-个人笔记版
java·笔记·sql·mysql·慢查询
loong_XL6 小时前
决策模型做内容安全检测:从踩坑到上线
数据库·安全·jev·决策模型
这个DBA有点耶6 小时前
数据库双轨并行实战:全量并行策略、增量延迟控制、双向回切与一致性校验
数据库·架构·dba
Gl�ria6 小时前
MySQL 单机版 vs 高可用版:宕机排查 + 故障处理
mysql·adb·架构