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分库分表与分区的入门指南
Apr 22 MySQL
超详细教你怎么升级Mysql的版本
May 19 MySQL
分析mysql中一条SQL查询语句是如何执行的
Jun 21 MySQL
详细聊聊关于Mysql联合查询的那些事儿
Oct 24 MySQL
深入讲解数据库中Decimal类型的使用以及实现方法
Feb 15 MySQL
一次SQL如何查重及去重的实战记录
Mar 13 MySQL
MySQL优化及索引解析
Mar 17 MySQL
优化Mysql查询的示例
Apr 26 MySQL
mysql实现将字符串字段转为数字排序或比大小
Jun 14 MySQL
MySQL详细讲解变量variables的用法
Jun 21 MySQL
MySQL的表级锁,行级锁,排它锁和共享锁
Jul 15 MySQL
MySQL一劳永逸永久支持输入中文的方法实例
Aug 05 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写的MySQL数据库用户认证系统代码
2007/03/22 PHP
laravel-admin 后台表格筛选设置默认的查询日期方法
2019/10/03 PHP
Javascript 个人笔记(没有整理,很乱)
2007/07/07 Javascript
获取客户端网卡MAC地址和IP地址实现JS代码
2013/03/17 Javascript
jquery next nextAll nextUntil siblings的区别介绍
2013/10/05 Javascript
node.js中的buffer.length方法使用说明
2014/12/14 Javascript
Javascript获取表单名称(name)的方法
2015/04/02 Javascript
jquery预加载图片的方法
2015/05/27 Javascript
基于jQuery实现歌词滚动版音乐播放器的代码
2016/09/17 Javascript
详解js的延迟对象、跨域、模板引擎、弹出层、AJAX【附实例下载】
2016/12/19 Javascript
Angular4 ElementRef的应用
2018/02/26 Javascript
JS基于封装函数实现的表格分页完整示例
2018/06/26 Javascript
详解vue-cli官方脚手架配置
2018/07/20 Javascript
NodeJS如何实现同步的方法示例
2018/08/24 NodeJs
angularjs自定义过滤器demo示例
2019/08/24 Javascript
用Python从零实现贝叶斯分类器的机器学习的教程
2015/03/31 Python
探究Python多进程编程下线程之间变量的共享问题
2015/05/05 Python
Python使用Supervisor来管理进程的方法
2015/05/28 Python
Python通过future处理并发问题
2017/10/17 Python
Scrapy抓取京东商品、豆瓣电影及代码分享
2017/11/23 Python
Python内置函数——__import__ 的使用方法
2017/11/24 Python
Python爬虫beautifulsoup4常用的解析方法总结
2019/02/25 Python
python如何把字符串类型list转换成list
2020/02/18 Python
Python实现病毒仿真器的方法示例(附demo)
2020/02/19 Python
Python不支持 i ++ 语法的原因解析
2020/07/22 Python
html5 canvas的绘制文本自动换行的示例代码
2018/09/17 HTML / CSS
美国领先的户外服装与装备用品店:Moosejaw
2016/08/25 全球购物
将n个数按输入顺序的逆序排列,用函数实现
2012/11/14 面试题
应届毕业生应聘自荐信范文
2014/02/26 职场文书
写求职信要注意什么问题
2014/04/12 职场文书
2014教师“四风问题”对照检查材料思想汇报
2014/09/16 职场文书
前台岗位职责范本
2015/04/16 职场文书
2015年党风廉政建设目标责任书
2015/05/08 职场文书
2015年度内部审计工作总结
2015/05/20 职场文书
老干部局2015年度工作总结
2015/10/22 职场文书
2016年社区国庆节活动总结
2016/04/01 职场文书