MySQL数据库索引的最左匹配原则


Posted in MySQL onNovember 20, 2021

一. 联合索引说明

建立三个字段的联合索引

联合索引(a,b,c)相当于建立了索引:(a),(a,b),(a,b,c)

二. 那ac是否能用到索引呢?

先给出结论:a可以命中联合索引(a,b,c),c无法命中,所以ac组合无法命中联合索引。

1.建立abc联合索引(province,city,district)

MySQL数据库索引的最左匹配原则

ac索引查询

SELECT * FROM user_address WHERE province = '广东' 
AND district = '南雄市'

MySQL数据库索引的最左匹配原则

显示查询范围是ALL

2.直接建立ac两个字段得联合索引

MySQL数据库索引的最左匹配原则

SELECT * FROM user_address WHERE province = '广东' 
AND district = '南雄市'

MySQL数据库索引的最左匹配原则

查询结果是ref走了索引,扫描的行数也从21行变成了13行

3.ab索引查询
MySQL数据库索引的最左匹配原则

查询范围为ref

结论

abc联合索引,ac中的c不能命中这三个字段的联合索引,a可以命中,所以possible_keys列会显示使用了联合索引

三. 思考

abc索引,acb会走索引吗?

  • 最左前缀匹配原则,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,
  • 比如a=3 and b=4 and c>5 and d=6如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整。
  • =和in可以乱序,比如a=1 and b=2 and c=3建立(a,b,c)索引可以任意顺序,mysql的查询优化器会帮你优化成索引可以识别的形式

四. 最左匹配原则的成因

  • 因为联合索引,如:abc,联合索引可以理解为有序的且形成的基础是建立在a上的,从a上建立b,b上建立c,所以必须要按照顺序来
  • 可以简单理解为:先对a排序建立索引,再在a的基础上对b进行排序,再是c
  • 所以联合索引在遇到范围查询,后面的索引会失效。

到此这篇关于MySQL数据库索引的最左匹配原则的文章就介绍到这了,更多相关MySQL 索引最左匹配 内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
MySQL 存储过程的优缺点分析
May 20 MySQL
52条SQL语句教你性能优化
May 25 MySQL
解决Navicat for MySQL 连接 MySQL 报2005错误的问题
May 29 MySQL
MySQL库表名大小写的选择
Jun 05 MySQL
MySQL系列之六 用户与授权
Jul 02 MySQL
浅谈MySQL之select优化方案
Aug 07 MySQL
MySQL连接控制插件介绍
Sep 25 MySQL
MySQL之select、distinct、limit的使用
Nov 11 MySQL
MySQL 开窗函数
Feb 15 MySQL
一文解答什么是MySQL的回表
Aug 05 MySQL
mysql函数之截取字符串的实现
Aug 14 MySQL
mysql 联合索引生效的条件及索引失效的条件
Nov 20 #MySQL
MySQL利用UNION连接2个查询排序失效详解
Nov 20 #MySQL
浅谈MySql整型索引和字符串索引失效或隐式转换问题
Nov 20 #MySQL
mysql5.7的安装及Navicate长久免费使用的实现过程
MySQL中order by的使用详情
Nov 17 #MySQL
关于MySQL中的 like操作符详情
Nov 17 #MySQL
MySQL窗口函数的具体使用
You might like
《猛禽小队》:DC宇宙的又一超级大烂片
2020/04/09 欧美动漫
php计算指定目录下文件占用空间的方法
2015/03/13 PHP
PHP入门教程之上传文件实例详解
2016/09/11 PHP
PHP PDO操作MySQL基础教程
2017/06/05 PHP
PHP中TP5 上传文件的实例详解
2017/07/31 PHP
JS打印gridview实现原理及代码
2013/02/05 Javascript
Javascript 鼠标移动上去 滑块跟随效果代码分享
2013/11/23 Javascript
jQuery获得页面元素的绝对/相对位置即绝对X,Y坐标
2014/03/06 Javascript
node.js中的fs.readFile方法使用说明
2014/12/15 Javascript
JavaScript获取按钮所在form表单id的方法
2015/04/02 Javascript
JS密码生成与强度检测完整实例(附demo源码下载)
2016/04/06 Javascript
详解vue express启动数据服务
2017/07/05 Javascript
AngularJS中controller控制器继承的使用方法
2017/11/03 Javascript
JavaScript实现区块链
2018/03/14 Javascript
nodejs初始化init的示例代码
2018/10/10 NodeJs
微信小程序学习笔记之跳转页面、传递参数获得数据操作图文详解
2019/03/28 Javascript
JS实现移动端双指缩放和旋转方法
2019/12/13 Javascript
JS如何生成随机验证码
2020/03/02 Javascript
40行代码把Vue3的响应式集成进React做状态管理
2020/05/20 Javascript
[03:42]2016国际邀请赛中国区预选赛首日现场玩家采访
2016/06/26 DOTA
[45:16]完美世界DOTA2联赛PWL S3 Magma vs Phoenix 第一场 12.12
2020/12/16 DOTA
python监控网站运行异常并发送邮件的方法
2015/03/13 Python
深入解析Python中函数的参数与作用域
2016/03/20 Python
Python机器学习算法之k均值聚类(k-means)
2018/02/23 Python
Python3中的列表生成式、生成器与迭代器实例详解
2018/06/11 Python
详解Python中的type和object
2018/08/15 Python
python通过matplotlib生成复合饼图
2020/02/06 Python
在django中使用post方法时,需要增加csrftoken的例子
2020/03/13 Python
美国转售二手商品的电子商务平台:BLINQ
2018/12/13 全球购物
施华洛世奇新加坡官网:SWAROVSKI新加坡
2020/10/06 全球购物
应届生文秘专业个人自荐信格式
2013/09/21 职场文书
时尚休闲吧创业计划书
2014/01/25 职场文书
村班子对照检查材料
2014/08/18 职场文书
导游词之河北白洋淀
2020/01/15 职场文书
PHP中->和=>的意思
2021/03/31 PHP
MySQL如何解决幻读问题
2021/08/07 MySQL