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 20 MySQL
MySQL 使用事件(Events)完成计划任务
May 24 MySQL
Mysql中 unique列插入重复值该怎么解决呢
May 26 MySQL
MySQL Innodb索引机制详细介绍
Nov 23 MySQL
mysql使用instr达到in(字符串)的效果
Apr 03 MySQL
MySQL创建管理HASH分区
Apr 13 MySQL
MySQL创建管理子分区
Apr 13 MySQL
MySQL脏读,幻读和不可重复读
May 11 MySQL
SQL语句中EXISTS的详细用法大全
Jun 25 MySQL
MySQL中正则表达式(REGEXP)使用详解
Jul 07 MySQL
MySQL实现用逗号进行拼接、以逗号进行分割
Dec 24 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下载CSS文件中的图片的代码
2013/09/24 PHP
php cli换行示例
2014/04/22 PHP
php如何获取文件的扩展名
2015/10/28 PHP
jQuery 表格插件整理
2010/04/27 Javascript
JavaScript高级程序设计 扩展--关于动态原型
2010/11/09 Javascript
js实现字符串和数组之间相互转换操作
2016/01/12 Javascript
jQuery改变form表单的action,并进行提交的实现代码
2016/05/25 Javascript
浅谈javascript中new操作符的原理
2016/06/07 Javascript
BootStrap 动态表单效果
2017/06/02 Javascript
小程序云开发之用户注册登录
2019/05/18 Javascript
koa+jwt实现token验证与刷新功能
2019/05/30 Javascript
vue element 生成无线级左侧菜单的实现代码
2019/08/21 Javascript
在vue中把含有html标签转为html渲染页面的实例
2019/10/28 Javascript
小程序实现密码输入框
2020/11/16 Javascript
编写同时兼容Python2.x与Python3.x版本的代码的几个示例
2015/03/30 Python
在ironpython中利用装饰器执行SQL操作的例子
2015/05/02 Python
Python实现获取域名所用服务器的真实IP
2015/10/25 Python
Python中第三方库Requests库的高级用法详解
2017/03/12 Python
selenium+python 对输入框的输入处理方法
2018/10/11 Python
在Mac下使用python实现简单的目录树展示方法
2018/11/01 Python
浅谈python下含中文字符串正则表达式的编码问题
2018/12/07 Python
Python制作动态字符图的实例
2019/01/27 Python
Python选择网卡发包及接收数据包
2019/04/04 Python
深入了解Python iter() 方法的用法
2019/07/11 Python
python pprint模块中print()和pprint()两者的区别
2020/02/10 Python
python 的numpy库中的mean()函数用法介绍
2020/03/03 Python
Python使用Opencv实现边缘检测以及轮廓检测的实现
2020/12/31 Python
Lands’ End官网:经典的美国生活方式品牌
2016/08/14 全球购物
里程积分管理买卖交换平台:Points.com
2017/01/13 全球购物
加拿大领先的冒险和户外零售商:Atmosphere
2017/12/19 全球购物
九月份红领巾广播稿
2014/01/22 职场文书
弘扬职业精神演讲稿
2014/03/20 职场文书
物流管理专业自荐信
2014/06/23 职场文书
课外活动总结范文
2014/07/09 职场文书
班干部学习委员竞选稿
2015/11/20 职场文书
实战 快速定位MySQL的慢SQL
2022/03/22 MySQL