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

相关推荐
保持学习ing1 小时前
day1--项目搭建and内容管理模块
java·数据库·后端·docker·虚拟机
发仔1232 小时前
Oracle与MySQL核心差异对比
mysql·oracle
宇钶宇夕2 小时前
EPLAN 电气制图:建立自己的部件库,添加部件-加SQL Server安装教程(三)上
运维·服务器·数据库·程序人生·自动化
爱可生开源社区2 小时前
SQLShift 重磅更新:支持 SQL Server 存储过程转换至 GaussDB!
数据库
贾修行3 小时前
SQL Server 空间函数从入门到精通:原理、实战与多数据库性能对比
数据库·sqlserver
傲祥Ax3 小时前
Redis总结
数据库·redis·redis重点总结
一屉大大大花卷4 小时前
初识Neo4j之入门介绍(一)
数据库·neo4j
叁沐4 小时前
MySQL 08 详解read view:事务到底是隔离的还是不隔离的?
mysql
周胡杰4 小时前
鸿蒙arkts使用关系型数据库,使用DB Browser for SQLite连接和查看数据库数据?使用TaskPool进行频繁数据库操作
前端·数据库·华为·harmonyos·鸿蒙·鸿蒙系统
wkj0014 小时前
navicate如何设置数据库引擎
数据库·mysql