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 相关文章推荐
数据库的高级查询六:表连接查询:外连接(左外连接,右外连接,UNION关键字,连接中ON与WHERE的不同)
Apr 05 MySQL
mysql批量新增和存储的方法实例
Apr 07 MySQL
MySQL命令无法输入中文问题的解决方式
Aug 30 MySQL
MySQL数据库必备之条件查询语句
Oct 15 MySQL
MySQL数据库索引的最左匹配原则
Nov 20 MySQL
防止web项目中的SQL注入
Dec 06 MySQL
MySQL笔记 —SQL运算符
Jan 18 MySQL
Mysql忘记密码解决方法
Feb 12 MySQL
MySQL脏读,幻读和不可重复读
May 11 MySQL
单机多实例部署 MySQL8.0.20
May 15 MySQL
MySQL的表级锁,行级锁,排它锁和共享锁
Jul 15 MySQL
关于MySQL中explain工具的使用
May 08 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
PHP防止注入攻击实例分析
2014/11/03 PHP
wampserver改变默认网站目录的办法
2015/08/05 PHP
PHP实现的进度条效果详解
2016/05/03 PHP
thinkPHP数据库增删改查操作方法实例详解
2016/12/06 PHP
kindeditor 加入七牛云上传的实例讲解
2017/11/12 PHP
php模拟实现斗地主发牌
2020/04/22 PHP
form.submit()不能提交表单的错误原因及解决方法
2014/10/13 Javascript
javascript实现通过表格绘制颜色填充矩形的方法
2015/04/21 Javascript
javascript中href和replace的比较(详解)
2016/11/25 Javascript
Vue.JS入门教程之事件监听
2016/12/01 Javascript
关于axios不能使用Vue.use()浅析
2018/01/12 Javascript
Vue cli3 库模式搭建组件库并发布到 npm的流程
2018/10/12 Javascript
JavaScript获取页面元素的常用方法详解
2019/09/28 Javascript
Vue中函数防抖节流的理解及应用实现
2020/04/24 Javascript
详解javascript void(0)
2020/07/13 Javascript
JQuery通过键盘控制键盘按下与松开触发事件
2020/08/07 jQuery
使用Python的Tornado框架实现一个一对一聊天的程序
2015/04/25 Python
python实现壁纸批量下载代码实例
2018/01/25 Python
解决python中遇到字典里key值为None的情况,取不出来的问题
2018/10/17 Python
pyqt 实现为长内容添加滑轮 scrollArea
2019/06/19 Python
python 修改本地网络配置的方法
2019/08/14 Python
python编写计算器功能
2019/10/25 Python
python生成xml时规定dtd实例方法
2020/09/21 Python
HTML5 声明兼容IE的写法
2011/05/16 HTML / CSS
服装公司总经理岗位职责
2013/11/30 职场文书
工程专业求职自荐书范文
2014/02/08 职场文书
爱与责任师德演讲稿
2014/08/26 职场文书
工作汇报开头与结尾怎么写
2014/11/08 职场文书
海洋天堂观后感
2015/06/05 职场文书
消费者理赔投诉书
2015/07/02 职场文书
2016年七夕爱情寄语
2015/12/04 职场文书
一篇合格的广告文案,其主要目的是什么?
2019/07/12 职场文书
浅谈pytorch中stack和cat的及to_tensor的坑
2021/05/20 Python
如何用PHP实现多线程编程
2021/05/26 PHP
制作能在nginx和IIS中使用的ssl证书
2021/06/21 Servers
在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理
2022/04/14 Python