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 相关文章推荐
Idea连接MySQL数据库出现中文乱码的问题
Apr 14 MySQL
IDEA 链接Mysql数据库并执行查询操作的完整代码
May 20 MySQL
Mysql官方性能测试工具mysqlslap的使用简介
May 21 MySQL
MYSQL数据库使用UTF-8中文编码乱码的解决办法
May 26 MySQL
MySQL query_cache_type 参数与使用详解
Jul 01 MySQL
MySQL系列之九 mysql查询缓存及索引
Jul 02 MySQL
mysql中整数数据类型tinyint详解
Dec 06 MySQL
面试中老生常谈的MySQL问答集锦夯实基础
Mar 13 MySQL
MySQL限制查询和数据排序介绍
Mar 25 MySQL
MySQL性能指标TPS+QPS+IOPS压测
Aug 05 MySQL
MySQL中LAG()函数和LEAD()函数的使用
Aug 14 MySQL
MySQL 原理与优化之Limit 查询优化
Aug 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
删除无限级目录与文件代码共享
2006/07/12 PHP
解析thinkphp import 文件内容变量失效的问题
2013/06/20 PHP
关于PHPDocument 代码注释规范的总结
2013/06/25 PHP
Laravel框架实现超简单的分页效果示例
2019/02/08 PHP
用javascript实现兼容IE7的类库 IE7_0_9.zip提供下载
2007/08/08 Javascript
js中单引号与双引号冲突问题解决方法
2013/10/04 Javascript
JavaScript的原型继承详解
2015/02/15 Javascript
JS实现屏蔽网页右键复制及ctrl+c复制的方法【2种方法】
2016/09/04 Javascript
JavaScript中原型链存在的问题解析
2016/09/25 Javascript
微信开发 使用picker封装省市区三级联动模板
2016/10/28 Javascript
详解Vue-基本标签和自定义控件
2017/03/24 Javascript
ES6新特性之变量和字符串用法示例
2017/04/01 Javascript
详解angularJS+Ionic移动端图片上传的解决办法
2017/09/13 Javascript
Vue中保存数据到磁盘文件的方法
2018/09/06 Javascript
通过js示例讲解时间复杂度与空间复杂度
2019/08/06 Javascript
python自动化测试之setUp与tearDown实例
2014/09/28 Python
Python实现的ini文件操作类分享
2014/11/20 Python
python中getaddrinfo()基本用法实例分析
2015/06/28 Python
Python基于最小二乘法实现曲线拟合示例
2018/06/14 Python
对python借助百度云API对评论进行观点抽取的方法详解
2019/02/21 Python
HTML的form表单和django的form表单
2019/07/25 Python
python的pstuil模块使用方法总结
2019/07/26 Python
在django中图片上传的格式校验及大小方法
2019/07/28 Python
Django模板标签{% for %}循环,获取制定条数据实例
2020/05/14 Python
DataFrame.groupby()所见的各种用法详解
2020/06/14 Python
Python识别验证码的实现示例
2020/09/30 Python
pycharm Tab键设置成4个空格的操作
2021/02/26 Python
单位提档介绍信
2014/01/17 职场文书
2014新生大学四年计划书
2014/09/21 职场文书
领导班子整改方案
2014/10/25 职场文书
2014年大班保育员工作总结
2014/12/02 职场文书
2014年骨干教师工作总结
2014/12/19 职场文书
2015年七一建党节慰问信
2015/03/23 职场文书
通知的写法
2015/04/23 职场文书
中学推普周活动总结
2015/05/07 职场文书
房屋所有权证明
2015/06/19 职场文书