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对于模糊查询like的一些汇总
May 09 MySQL
详解GaussDB for MySQL性能优化
May 18 MySQL
linux下导入、导出mysql数据库命令的实现方法
May 26 MySQL
MySQL完整性约束的定义与实例教程
May 30 MySQL
详细谈谈MYSQL中的COLLATE是什么
Jun 11 MySQL
mysql如何配置白名单访问
Jun 30 MySQL
MySQL连表查询分组去重的实现示例
Jul 01 MySQL
Mysql关于数据库是否应该使用外键约束详解说明
Oct 24 MySQL
详细聊聊关于Mysql联合查询的那些事儿
Oct 24 MySQL
Mysql外键约束的创建与删除的使用
Mar 03 MySQL
MySQL控制流函数(-if ,elseif,else,case...when)
Jul 07 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 checkbox复选框值的获取与checkbox默认值输出方法
2010/05/15 PHP
PHP获取input输入框中的值去数据库比较显示出来
2016/11/16 PHP
详解Laravel5.6 Passport实现Api接口认证
2018/07/27 PHP
HTML页面如何象ASP一样接受参数
2007/02/07 Javascript
情人节专属 纯js脚本1k大小的3D玫瑰效果
2012/02/11 Javascript
js 火狐下取本地路径实现思路
2013/04/02 Javascript
webapp框架AngularUI的demo改造之路
2014/12/21 Javascript
基于jquery实现百度新闻导航菜单滑动动画
2016/03/15 Javascript
[原创]JS基于FileSaver.js插件实现文件保存功能示例
2016/12/08 Javascript
js实现淡入淡出轮播切换功能
2017/01/13 Javascript
JavaScript Uploadify文件上传实例
2017/02/28 Javascript
angular中ui calendar的一些使用心得(推荐)
2017/11/03 Javascript
快速解决Vue项目在IE浏览器中显示空白的问题
2018/09/04 Javascript
纯javascript前端实现base64图片下载(兼容IE10+)
2018/09/14 Javascript
vue 使用vue-i18n做全局中英文切换的方法
2018/10/29 Javascript
小程序的上传文件接口的注意要点解析
2019/09/17 Javascript
js正则匹配多个全部数据问题
2019/12/20 Javascript
详解vue-router的导航钩子(导航守卫)
2020/11/02 Javascript
[55:04]海涛DOTA2死魂复燃6.82版本介绍
2014/09/28 DOTA
深入理解Python 关于supper 的 用法和原理
2018/02/28 Python
用Python读取几十万行文本数据
2018/12/24 Python
Django框架HttpRequest对象用法实例分析
2019/11/01 Python
Python3.7 基于 pycryptodome 的AES加密解密、RSA加密解密、加签验签
2019/12/04 Python
Python实现搜索算法的实例代码
2020/01/02 Python
领先的钻石和订婚戒指零售商:Diamonds-USA
2016/12/11 全球购物
美国本地交易和折扣网站:LocalFlavor.com
2017/10/26 全球购物
数以千计的折扣工业产品:ESE Direct
2018/05/20 全球购物
Dogeared官网:在美国手工制作的珠宝
2019/08/24 全球购物
司机检讨书
2014/02/13 职场文书
家庭困难证明
2014/10/12 职场文书
学校政风行风评议工作总结
2014/10/21 职场文书
新郎新娘答谢词
2015/01/04 职场文书
Python中常见的导入方式总结
2021/05/06 Python
Python数据分析入门之教你怎么搭建环境
2021/05/13 Python
vue3.0 数字翻牌组件的使用方法详解
2022/04/20 Vue.js
centos环境下nginx高可用集群的搭建指南
2022/07/23 Servers