最左匹配原则的底层原理
什么是最左匹配原则
顾名思义:最左优先,以最左边的为起点任何连续的索引都能匹配上。同时遇到范围查询(>、<、between、like)就会停止匹配。
例如:如果建立(a,b)顺序的索引,我们的条件只有b=xxx,是匹配不到(a,b)索引的;但是如果查询条件是a = 1 and b = 2或者b=2 and a=1就可以,因为优化器会自动调整a,b的顺序,并不需要严格按照索引的顺序来;再比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,因为c字段是一个范围查询,它之后的字段会停止匹配
为什么会形成最左匹配原则
首先要知道,最左匹配原则都是针对联合索引来说的,所以我们有必要了解一下联合索引的原理。了解了联合索引,那么为什么会有最左匹配原则这种说法也就理解了。
我们都知道索引的底层是一颗B+树,那么联合索引当然还是一颗B+树,只不过联合索引的健值数量不是一个,而是多个。构建一颗B+树只能根据一个值来构建,因此数据库依据联合索引最左的字段来构建B+树。
例子:假如创建一个(a,b)的联合索引,那么它的索引树是这样的
可以看到a的值是有顺序的,1,1,2,2,3,3,而b的值是没有顺序的1,2,1,4,1,2。所以b = 2这种查询条件没有办法利用索引,因为联合索引首先是按a排序的,b是无序的。
同时我们还可以发现在a值相等的情况下,b值又是按顺序排列的,但是这种顺序是相对的。所以最左匹配原则遇上范围查询就会停止,剩下的字段都无法使用索引。例如a = 1 and b = 2 a,b字段都可以使用索引,因为在a值确定的情况下b是相对有序的,而a>1and b=2,a字段可以匹配上索引,但b值不可以,因为a的值是一个范围,在这个范围中b是无序的。
最左匹配原则的底层原理相关推荐
- MYSQL的最左匹配原则的原理讲解
MYSQL | 最左匹配原则的原理 最左匹配原则 最左匹配原则就是指在联合索引中,如果你的 SQL 语句中用到了联合索引中的最左边的索引,那么这条 SQL 语句就可以利用这个联合索引去进行匹配.例如某 ...
- Mysql索引失效原理与最左匹配原则
索引的底层是一颗B+树,那么联合索引当然还是一颗B+树,只不过联合索引的健值数量不是一个,而是多个.构建一颗B+树只能根据一个值来构建,因此数据库依据联合索引最左的字段来构建B+树. 例子:假如创建一 ...
- 深入浅析Mysql联合索引原理 之 最左匹配原则。
前言 之前在网上看到过很多关于mysql联合索引最左前缀匹配的文章,自以为就了解了其原理,最近面试时和大牛交流中,发现遗漏了些东西,这里自己整理一下这方面的内容. 最左前缀匹配原则 在mysql建立联 ...
- 什么是最左匹配原则?
1.简单说下什么是最左匹配原则 顾名思义:最左优先,以最左边的为起点任何连续的索引都能匹配上.同时遇到范围查询(>.<.between.like)就会停止匹配. 例如:b = 2 如果建立 ...
- 理解mysql 底层原理
理解mysql 底层原理 mysql 关系数据库的一种,开源免费,支持百万级的存储性能.性能稳定.社区活跃 鉴于 本人半路出家,对于一些原理的东西都不怎么了解,正好 无所事事的情况下,翻博客,吸取知识 ...
- 数据库两大必备神器:索引和锁底层原理是什么!
git:https://github.com/singgel?tab=repositories 一.索引 在之前,我对索引有以下的认知: 索引可以加快数据库的检索速度: 表经常进行INSERT/UPD ...
- MySQL索引和B+Tree底层原理
目录 说明 一.索引的引入 二.MySQL为什么使用B+树,而不是使用B树,AVL? 二叉搜索树 AVL 平衡二叉搜索树 B-Tree(B树) B+Tree(B+树) B+Tree衍生问题 三.什么是 ...
- 倒排索引:ES倒排索引底层原理及FST算法的实现过程
文章目录 引言 1.倒排索引核心原理 2.倒排索引的存储结构 2.1 倒排表(Posting List) 2.2 词项字典(Term Dictionary) 2.3 词项索引(Term Index) ...
- 【MySQL】InnoDB行格式、数据页结构以及索引底层原理分析
目录 一.MySQL架构图 二.InnoDB数据页结构 2.1 局部性原理 2.2 InnoDB的数据页格式 三.InnoDB的行格式 3.1 Compact行格式 3.1.1 变长字段长度列表 3. ...
最新文章
- Unicode字段也有collation
- python中的定制类(转载)
- Spring的常用注解,SpringMVC常用注解
- 写一个饿汉单例模式的例子_你写的单例模式,能防止反序列化和反射吗?
- mysql数据漂移_第28问:SIP 漂移时,会影响正在使用的数据库连接么?
- Golang 网络爬虫框架gocolly/colly
- Makefile 教程(超详细)
- 终于注册csdn博客了!
- 光谱数据计算CIE值(三刺激值、CIE1931、CIE1976、CCT)软件
- abaqus截面惯性矩_各种截面的惯性矩怎么计算?
- linux kernel 报错:FATAL: kernel too old
- 线性代数笔记11:正定矩阵理解及推导
- 苹果手机怎么备份所有数据_数据蛙:微信怎么备份手机通讯录,随时备份和恢复手机联系人!...
- 利用powerful number求积性函数前缀和
- 智慧校园解决方案:一站式解决校园数字化转型难题
- BPM软件是什么?BPM软件跟BPA有关联吗?
- mysql mycat水平分库_MyCat水平分库
- 关于淘宝 TOP 开发 使用的一些心得,问题不断更新中。。。
- Java - Java子类继承父类并调用接口
- MT4如何使用软件开展自动交易详细步骤