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 22 MySQL
修改MySQL的数据库引擎为INNODB的方法
May 26 MySQL
SQL实现LeetCode(180.连续的数字)
Aug 04 MySQL
彻底解决MySQL使用中文乱码的方法
Jan 22 MySQL
MySQL优化常用的19种有效方法(推荐!)
Mar 17 MySQL
MySQL学习必备条件查询数据
Mar 25 MySQL
MySQL索引 高效获取数据的数据结构
May 02 MySQL
MySQL脏读,幻读和不可重复读
May 11 MySQL
mysql 排序失效
May 20 MySQL
详解Mysql数据库平滑扩容解决高并发和大数据量问题
May 25 MySQL
SQL Server数据库的三种创建方法汇总
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开发过程中关于继承的使用方法分享
2011/06/17 PHP
php判断终端是手机还是电脑访问网站的思路及代码
2013/04/24 PHP
使用Curl进行抓取远程内容时url中文编码问题示例探讨
2013/10/29 PHP
php生成RSS订阅的方法
2015/02/13 PHP
Symfony2学习笔记之控制器用法详解
2016/03/17 PHP
PHP二分查找算法示例【递归与非递归方法】
2016/09/29 PHP
php实现的统计字数函数定义与使用示例
2017/07/26 PHP
关于laravel框架中的常用目录路径函数
2019/10/23 PHP
清华大学出版的事半功倍系列 javascript全部源代码
2007/05/04 Javascript
jquery实现excel导出的方法
2013/04/04 Javascript
js检查页面上有无重复id的实现代码
2013/07/17 Javascript
JS小功能(setInterval实现图片效果显示时间)实例代码
2013/11/28 Javascript
node.js中的fs.openSync方法使用说明
2014/12/17 Javascript
jQuery中map()方法用法实例
2015/01/06 Javascript
JavaScript 函数模式详解及示例
2016/09/07 Javascript
微信小程序注册60s倒计时功能 使用JS实现注册60s倒计时功能
2017/08/16 Javascript
微信小程序自定义底部导航带跳转功能
2018/11/27 Javascript
python实现ftp客户端示例分享
2014/02/17 Python
简单介绍Ruby中的CGI编程
2015/04/10 Python
Python基于递归算法求最小公倍数和最大公约数示例
2018/07/27 Python
pandas的排序和排名的具体使用
2019/07/31 Python
Python基础之函数基本用法与进阶详解
2020/01/02 Python
关于python pycharm中输出的内容不全的解决办法
2020/01/10 Python
python基于property()函数定义属性
2020/01/22 Python
使用Python Tkinter实现剪刀石头布小游戏功能
2020/10/23 Python
浅谈pc和移动端的响应式的使用
2019/01/03 HTML / CSS
世界上最大的专业美容用品零售商:Sally Beauty
2017/07/02 全球购物
英国假发网站:Hothair
2018/02/23 全球购物
英国排名第一的停车场运营商:NCP
2019/08/26 全球购物
企业管理部经理岗位职责
2013/12/24 职场文书
餐饮收银员岗位职责
2014/02/07 职场文书
工作会议主持词
2014/03/17 职场文书
干货:如何写好观后感 !
2019/05/21 职场文书
Python中文纠错的简单实现
2021/07/07 Python
MySQL多表查询机制
2022/03/17 MySQL
VW、VH适配移动端的解决方案与常见问题
2023/05/21 HTML / CSS