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 相关文章推荐
多表查询、事务、DCL
Apr 05 MySQL
MySQL中你可能忽略的COLLATION实例详解
May 12 MySQL
MySQL 覆盖索引的优点
May 19 MySQL
Mysql Online DDL的使用详解
May 20 MySQL
.Net Core导入千万级数据至Mysql的步骤
May 24 MySQL
mysql聚集索引、辅助索引、覆盖索引、联合索引的使用
Feb 12 MySQL
mysql自增长id用完了该怎么办
Feb 12 MySQL
Pycharm远程调试和MySQL数据库授权问题
Mar 18 MySQL
Nebula Graph解决风控业务实践
Mar 31 MySQL
MySql分区类型及创建分区的方法
Apr 13 MySQL
pt-archiver 主键自增
Apr 26 MySQL
MySQL transaction事务安全示例讲解
Jun 21 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
Mysql和网页显示乱码解决方法集锦
2008/03/27 PHP
解析php中mysql_connect与mysql_pconncet的区别详解
2013/05/15 PHP
获取URL文件名后缀
2013/10/24 PHP
php一行代码获取文件后缀名实例分析
2014/11/12 PHP
ThinkPHP 整合Bootstrap Ajax分页样式
2016/12/23 PHP
基于PHP实现微信小程序客服消息功能
2019/08/12 PHP
Laravel使用原生sql语句并调用的方法
2019/10/09 PHP
swoole锁的机制代码实例讲解
2021/03/04 PHP
基于jquery的返回顶部效果(兼容IE6)
2011/01/17 Javascript
javascript Event对象详解及使用示例
2013/11/22 Javascript
jquery判断密码强度的验证代码
2020/04/22 Javascript
Vue.extend构造器的详解
2017/07/17 Javascript
nginx部署访问vue-cli搭建的项目的方法
2018/02/12 Javascript
vue-cli下的vuex的简单Demo图解(实现加1减1操作)
2018/02/26 Javascript
vue组件与复用详解
2018/04/08 Javascript
JQuery Ajax执行跨域请求数据的解决方案
2018/12/10 jQuery
ionic使用angularjs表单验证(模板验证)
2018/12/12 Javascript
微信小程序实现原生步骤条
2019/07/25 Javascript
[02:45]DOTA2英雄敌法师基础教程
2013/11/25 DOTA
[01:02:18]VGJ.S vs infamous Supermajor 败者组 BO3 第一场 6.4
2018/06/05 DOTA
python实现批量修改文件名代码
2017/09/10 Python
python编程实现12306的一个小爬虫实例
2017/12/27 Python
python+pyqt5实现24点小游戏
2019/01/24 Python
Python数据类型之Number数字操作实例详解
2019/05/08 Python
使用Bazel编译TensorBoard教程
2020/02/15 Python
判断Threading.start新线程是否执行完毕的实例
2020/05/02 Python
Python enumerate() 函数如何实现索引功能
2020/06/29 Python
Melissa香港官网:MDreams
2016/07/01 全球购物
Kathmandu英国网站:新西兰户外运动品牌
2017/03/27 全球购物
工程采购员岗位职责
2014/03/09 职场文书
物业总经理助理岗位职责
2014/06/29 职场文书
小学国旗下的演讲稿
2014/08/28 职场文书
2014年党建工作汇报材料
2014/10/27 职场文书
简述python四种分词工具,盘点哪个更好用?
2021/04/13 Python
《进击的巨人》新联动CM 兵长强势出击兽巨人
2022/04/05 日漫
VUE递归树形实现多级列表
2022/07/15 Vue.js