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

相关推荐
自在极意功。10 分钟前
InnoDB 存储引擎的逻辑存储结构深度解析
mysql·innodb·b+树·索引
Stone_OverLooking42 分钟前
Qt6.5.3 mingw64 Ninja编译oracle oci驱动
数据库·qt·oracle
Java爱好狂.1 小时前
如何用JAVA技术设计一个高并发系统?
java·数据库·高并发·架构设计·java面试·java架构师·java八股文
慌糖1 小时前
读书笔记之MySQL的字符集与比较规则小读
数据库
张洪权1 小时前
RBAC 菜单查询的“标准写法”
mysql
码农很忙1 小时前
从0到1搭建智能分析OBS埋点数据的AI Agent:实战指南
数据库·人工智能
安当加密1 小时前
Oracle数据库透明加密实践:基于TDE架构的安全加固方案
数据库·oracle·架构
织元Zmetaboard1 小时前
什么是态势感知大屏?
网络·数据库
NineData1 小时前
NineData 支持 DB2 迁移到 PolarDB Oracle
数据库·oracle·ninedata·数据库迁移·数据库迁移工具·信创改造·智能数据管理平台
乘风!1 小时前
服务器上部署的Mysql,服务器上可登录成功,远程电脑无法连接的
mysql