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 28 MySQL
Mysql 如何实现多张无关联表查询数据并分页
Jun 05 MySQL
解析MySQL binlog
Jun 11 MySQL
MySQL系列之八 MySQL服务器变量
Jul 02 MySQL
解决mysql的int型主键自增问题
Jul 15 MySQL
Mysql实现简易版搜索引擎的示例代码
Aug 30 MySQL
MySQL七种JOIN类型小结
Oct 24 MySQL
关于mysql中时间日期类型和字符串类型的选择
Nov 27 MySQL
一条 SQL 语句执行过程
Mar 17 MySQL
Linux系统下MySQL配置主从分离的步骤
Mar 21 MySQL
Mysql如何实现不存在则插入,存在则更新
Mar 25 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
Linux平台php命令行程序处理管道数据的方法
2016/11/10 PHP
PHP判断函数是否被定义的方法
2019/06/21 PHP
PHP通过文件保存和更新信息的方法分析
2019/09/12 PHP
CLASS_CONFUSION JS混淆 全源码
2007/12/12 Javascript
JavaScript脚本性能优化注意事项
2008/11/18 Javascript
JavaScript中“基本类型”之争小结
2013/01/03 Javascript
jQuery渐变发光导航菜单的实例代码
2013/03/27 Javascript
js sort 二维数组排序的用法小结
2014/01/24 Javascript
JS跨域解决方案之使用CORS实现跨域
2016/04/14 Javascript
JS键盘版计算器的制作方法
2016/12/03 Javascript
Highcharts+NodeJS搭建数据可视化平台示例
2017/01/01 NodeJs
前端开发不得不知的10个最佳ES6特性
2017/08/30 Javascript
Angular4学习笔记之根模块与Ng模块
2017/09/09 Javascript
AngularJS 实现购物车全选反选功能
2017/10/24 Javascript
jquery+ajaxform+springboot控件实现数据更新功能
2018/01/22 jQuery
js中Array对象的常用遍历方法详解
2019/01/17 Javascript
使用vue中的混入mixin优化表单验证插件问题
2019/07/02 Javascript
百度小程序自定义通用toast组件
2019/07/17 Javascript
vant实现购物车功能
2020/06/29 Javascript
[02:52]2014DOTA2西雅图国际邀请赛 CIS战队巡礼
2014/07/07 DOTA
使用django-guardian实现django-admin的行级权限控制的方法
2018/10/30 Python
python3实现网络爬虫之BeautifulSoup使用详解
2018/12/19 Python
python深copy和浅copy区别对比解析
2019/12/26 Python
Pycharm 如何一键加引号的方法步骤
2021/02/05 Python
酒店办公室文员岗位职责
2013/12/18 职场文书
预备党员入党思想汇报
2014/01/04 职场文书
爷爷追悼会答谢词
2014/01/24 职场文书
七年级生物教学反思
2014/01/30 职场文书
语文教育专业求职信
2014/06/28 职场文书
求职意向书
2014/07/29 职场文书
校本培训个人总结
2015/02/28 职场文书
员工试用期转正自我评价
2015/03/10 职场文书
Nginx+Tomcat实现负载均衡、动静分离的原理解析
2021/03/31 Servers
CSS的class与id常用的命名规则
2021/05/18 HTML / CSS
Python图片验证码降噪和8邻域降噪
2021/08/30 Python
win11自动弹出虚拟键盘怎么关闭? Win11关闭虚拟键盘的技巧
2023/01/09 数码科技