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 05 MySQL
MySQL 数据丢失排查案例
May 08 MySQL
MySQL中InnoDB存储引擎的锁的基本使用教程
May 26 MySQL
MySQL为id选择合适的数据类型
Jun 07 MySQL
Node-Red实现MySQL数据库连接的方法
Aug 07 MySQL
MySQL之select、distinct、limit的使用
Nov 11 MySQL
MySQL中CURRENT_TIMESTAMP的使用方式
Nov 27 MySQL
教你如何让spark sql写mysql的时候支持update操作
Feb 15 MySQL
MySQL学习之基础操作总结
Mar 19 MySQL
解决MySQL Varchar 类型尾部空格的问题
Apr 06 MySQL
MySQL批量更新不同表中的数据
May 11 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
Syphon 虹吸式咖啡壶冲煮–拨动法
2021/03/03 冲泡冲煮
要会喝咖啡也要会知道咖啡豆
2021/03/03 咖啡文化
通过5个php实例细致说明传值与传引用的区别
2012/08/08 PHP
php提交post数组参数实例分析
2015/12/17 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
拖动Html元素集合 Drag and Drop any item
2006/12/22 Javascript
IE和Mozilla的兼容性汇总event
2007/08/12 Javascript
JavaScript 数组详解
2013/10/10 Javascript
jQuery之Deferred对象详解
2014/09/04 Javascript
JS实现超简洁网页title标题跑动闪烁提示效果代码
2015/10/23 Javascript
基于javascript实现按圆形排列DIV元素(二)
2016/12/02 Javascript
JavaScript判断变量名是否存在数组中的实例
2017/12/28 Javascript
js实现随机div颜色位置 类似满天星效果
2019/10/24 Javascript
[01:01:24]DOTA2上海特级锦标赛A组败者赛 EHOME VS CDEC第三局
2016/02/25 DOTA
[01:36:19]Secret vs NB 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
[45:32]Liquid vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
tornado捕获和处理404错误的方法
2014/02/26 Python
Python入门篇之文件
2014/10/20 Python
Python中的包和模块实例
2014/11/22 Python
Python基于二分查找实现求整数平方根的方法
2016/05/12 Python
使用python将大量数据导出到Excel中的小技巧分享
2018/06/14 Python
django之静态文件 django 2.0 在网页中显示图片的例子
2019/07/28 Python
matplotlib实现显示伪彩色图像及色度条
2019/12/07 Python
pytorch掉坑记录:model.eval的作用说明
2020/06/23 Python
Python3基于print打印带颜色字符串
2020/07/06 Python
TripAdvisor印尼站:全球领先的旅游网站
2018/03/15 全球购物
Vilebrequin欧洲官网:法国豪华泳装品牌(男士沙滩裤)
2018/04/14 全球购物
台湾母婴用品购物网站:Infant婴之房
2018/06/15 全球购物
NET程序员上机面试题
2015/05/23 面试题
J2EE相关知识面试题
2013/08/26 面试题
致400米运动员广播稿
2014/02/07 职场文书
《我为你骄傲》教学反思
2014/02/20 职场文书
爱牙日活动总结
2014/08/29 职场文书
工作检讨书500字
2014/10/19 职场文书
金融专业银行实习证明模板
2014/11/28 职场文书
导游词之峨眉乐山/兵马俑/北京故宫御花园
2019/09/03 职场文书