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 相关文章推荐
Windows10下安装MySQL8
Apr 06 MySQL
Mysql基础知识点汇总
May 26 MySQL
MySQL中日期型单行函数代码详解
Jun 21 MySQL
MySQL系列之四 SQL语法
Jul 02 MySQL
MySQL into_Mysql中replace与replace into用法案例详解
Sep 14 MySQL
MySQL中datetime时间字段的四舍五入操作
Oct 05 MySQL
MySQL优化常用的19种有效方法(推荐!)
Mar 17 MySQL
MySQL数据库查询进阶之多表查询详解
Apr 08 MySQL
MySQL创建管理HASH分区
Apr 13 MySQL
mysql 乱码 字符集latin1转UTF8
Apr 19 MySQL
提高系统的吞吐量解决数据库重复写入问题
Apr 23 MySQL
mysql实现将字符串字段转为数字排序或比大小
Jun 14 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
4.与数据库的连接
2006/10/09 PHP
PHP static局部静态变量和全局静态变量总结
2014/03/02 PHP
php中json_encode UTF-8中文乱码的更好解决方法
2014/09/28 PHP
php mysql PDO 查询操作的实例详解
2017/09/23 PHP
Mozilla中显示textarea中选择的文字
2006/09/07 Javascript
Jquery 实现Tab效果 思路是js思路
2010/03/02 Javascript
JavaScript 面向对象编程(2) 定义类
2010/05/18 Javascript
JavaScript使用过程中需要注意的地方和一些基本语法
2010/08/26 Javascript
js中的值类型和引用类型小结 文字说明与实例
2010/12/12 Javascript
jquery中each遍历对象和数组示例
2014/08/05 Javascript
jQuery动画出现连续触发、滞后反复执行的解决方法
2015/01/28 Javascript
深入分析Cookie的安全性问题
2015/03/01 Javascript
使用npm发布Node.JS程序包教程
2015/03/02 Javascript
jQuery实现鼠标悬停显示提示信息窗口的方法
2015/04/30 Javascript
Jquery基础教程之DOM操作
2015/08/19 Javascript
详解iframe与frame的区别
2016/01/13 Javascript
【经典源码收藏】jQuery实用代码片段(筛选,搜索,样式,清除默认值,多选等)
2016/06/07 Javascript
AngularJS中directive指令使用之事件绑定与指令交互用法示例
2016/11/22 Javascript
基于JS设计12306登录页面
2016/12/28 Javascript
jquery事件与绑定事件
2017/03/16 Javascript
Angularjs实现页面模板清除的方法
2018/07/20 Javascript
nodejs 生成和导出 word的实例代码
2018/07/31 NodeJs
[00:28]DOTA2北京网鱼队选拔赛
2015/04/08 DOTA
[01:44]《为梦想出发》—联想杯DOTA2完美世界全国高校联赛
2015/09/30 DOTA
Python操作MongoDB详解及实例
2017/05/18 Python
详解python里使用正则表达式的分组命名方式
2017/10/24 Python
python读取图片的方式,以及将图片以三维数组的形式输出方法
2019/07/03 Python
Python Socketserver实现FTP文件上传下载代码实例
2020/03/27 Python
Python unittest框架操作实例解析
2020/04/13 Python
英国排名第一的宠物店:PetPlanet
2020/02/02 全球购物
应届生英语教师求职信
2013/11/05 职场文书
测绘工程专业求职信
2014/07/15 职场文书
解放思想大讨论活动心得体会
2014/09/11 职场文书
2014财务人员自我评价范文
2014/09/21 职场文书
大学生自荐书范文
2015/03/05 职场文书
Java 在线考试云平台的实现
2021/11/23 Java/Android