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索引知识的一些小妙招总结
May 10 MySQL
MySql新手入门的基本操作汇总
May 13 MySQL
Mysql中 unique列插入重复值该怎么解决呢
May 26 MySQL
SQL注入的实现以及防范示例详解
Jun 02 MySQL
mysql5.7使用binlog 恢复数据的方法
Jun 03 MySQL
探究Mysql模糊查询是否区分大小写
Jun 11 MySQL
低版本Druid连接池+MySQL驱动8.0导致线程阻塞、性能受限
Jul 01 MySQL
MySQL面试题讲解之如何设置Hash索引
Nov 01 MySQL
MySQL慢查询优化解决问题
Mar 17 MySQL
MySQL如何使备份得数据保持一致
May 02 MySQL
Mysql 一主多从的部署
May 20 MySQL
MYSQL如何查看操作日志详解
May 30 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/10/09 PHP
PHP语法速查表
2007/01/02 PHP
解析php dirname()与__FILE__常量的应用
2013/06/24 PHP
php删除字符串末尾子字符,删除开始字符,删除两端字符(实现代码)
2013/06/27 PHP
PHP中4种常用的抓取网络数据方法
2015/06/04 PHP
symfony2.4的twig中date用法分析
2016/03/18 PHP
浅谈PHP发送HTTP请求的几种方式
2017/07/25 PHP
PHP实现数组转JSon和JSon转数组的方法示例
2018/06/14 PHP
PHP封装的分页类与简单用法示例
2019/02/25 PHP
javascript 操作文件 实现方法小结
2009/07/02 Javascript
javascript针对DOM的应用实例(一)
2012/04/15 Javascript
javascript中attribute和property的区别详解
2014/06/05 Javascript
JQuery中DOM事件冒泡实例分析
2015/06/13 Javascript
JS如何判断是否为ie浏览器的方法(包括IE10、IE11在内)
2015/12/13 Javascript
Bootstrap的class样式小结
2016/12/01 Javascript
javascript构造函数以及原型对象的理解
2017/01/13 Javascript
十大热门的JavaScript框架和库
2017/03/21 Javascript
详解Vue.js 2.0 如何使用axios
2017/04/21 Javascript
详解vue项目中如何引入全局sass/less变量、function、mixin
2018/06/02 Javascript
基于Vue 2.0 监听文本框内容变化及ref的使用说明介绍
2018/08/24 Javascript
JSX在render函数中的应用详解
2019/09/04 Javascript
Vue(定时器)解决mounted不能获取到data中的数据问题
2020/07/30 Javascript
如何在JavaScript中等分数组的实现
2020/12/13 Javascript
Python导入模块时遇到的错误分析
2017/08/30 Python
python实现遍历文件夹修改文件后缀
2018/08/28 Python
Django Rest framework解析器和渲染器详解
2019/07/25 Python
Python如何实现在字符串里嵌入双引号或者单引号
2020/03/02 Python
法学专业本科生自荐信范文
2013/12/17 职场文书
便利店的创业计划书
2014/01/15 职场文书
2015年党风廉政承诺书
2015/01/22 职场文书
公司规章制度范本
2015/08/03 职场文书
2016年教师节感恩寄语
2015/12/04 职场文书
彻底理解golang中什么是nil
2021/04/29 Golang
安装配置mysql及Navicat prenium的详细流程
2021/06/10 MySQL
浅谈mysql增加索引不生效的几种情况
2021/06/23 MySQL
Java多线程并发FutureTask使用详解
2022/06/28 Java/Android