什么是最左匹配原则

顾名思义:最左优先,以最左边的为起点任何连续的索引都能匹配上。同时遇到范围查询(>、<、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是无序的。

最左匹配原则的底层原理相关推荐

  1. MYSQL的最左匹配原则的原理讲解

    MYSQL | 最左匹配原则的原理 最左匹配原则 最左匹配原则就是指在联合索引中,如果你的 SQL 语句中用到了联合索引中的最左边的索引,那么这条 SQL 语句就可以利用这个联合索引去进行匹配.例如某 ...

  2. Mysql索引失效原理与最左匹配原则

    索引的底层是一颗B+树,那么联合索引当然还是一颗B+树,只不过联合索引的健值数量不是一个,而是多个.构建一颗B+树只能根据一个值来构建,因此数据库依据联合索引最左的字段来构建B+树. 例子:假如创建一 ...

  3. 深入浅析Mysql联合索引原理 之 最左匹配原则。

    前言 之前在网上看到过很多关于mysql联合索引最左前缀匹配的文章,自以为就了解了其原理,最近面试时和大牛交流中,发现遗漏了些东西,这里自己整理一下这方面的内容. 最左前缀匹配原则 在mysql建立联 ...

  4. 什么是最左匹配原则?

    1.简单说下什么是最左匹配原则 顾名思义:最左优先,以最左边的为起点任何连续的索引都能匹配上.同时遇到范围查询(>.<.between.like)就会停止匹配. 例如:b = 2 如果建立 ...

  5. 理解mysql 底层原理

    理解mysql 底层原理 mysql 关系数据库的一种,开源免费,支持百万级的存储性能.性能稳定.社区活跃 鉴于 本人半路出家,对于一些原理的东西都不怎么了解,正好 无所事事的情况下,翻博客,吸取知识 ...

  6. 数据库两大必备神器:索引和锁底层原理是什么!

    git:https://github.com/singgel?tab=repositories 一.索引 在之前,我对索引有以下的认知: 索引可以加快数据库的检索速度: 表经常进行INSERT/UPD ...

  7. MySQL索引和B+Tree底层原理

    目录 说明 一.索引的引入 二.MySQL为什么使用B+树,而不是使用B树,AVL? 二叉搜索树 AVL 平衡二叉搜索树 B-Tree(B树) B+Tree(B+树) B+Tree衍生问题 三.什么是 ...

  8. 倒排索引:ES倒排索引底层原理及FST算法的实现过程

    文章目录 引言 1.倒排索引核心原理 2.倒排索引的存储结构 2.1 倒排表(Posting List) 2.2 词项字典(Term Dictionary) 2.3 ​词项索引(Term Index) ...

  9. 【MySQL】InnoDB行格式、数据页结构以及索引底层原理分析

    目录 一.MySQL架构图 二.InnoDB数据页结构 2.1 局部性原理 2.2 InnoDB的数据页格式 三.InnoDB的行格式 3.1 Compact行格式 3.1.1 变长字段长度列表 3. ...

最新文章

  1. Unicode字段也有collation
  2. python中的定制类(转载)
  3. Spring的常用注解,SpringMVC常用注解
  4. 写一个饿汉单例模式的例子_你写的单例模式,能防止反序列化和反射吗?
  5. mysql数据漂移_第28问:SIP 漂移时,会影响正在使用的数据库连接么?
  6. Golang 网络爬虫框架gocolly/colly
  7. Makefile 教程(超详细)
  8. 终于注册csdn博客了!
  9. 光谱数据计算CIE值(三刺激值、CIE1931、CIE1976、CCT)软件
  10. abaqus截面惯性矩_各种截面的惯性矩怎么计算?
  11. linux kernel 报错:FATAL: kernel too old
  12. 线性代数笔记11:正定矩阵理解及推导
  13. 苹果手机怎么备份所有数据_数据蛙:微信怎么备份手机通讯录,随时备份和恢复手机联系人!...
  14. 利用powerful number求积性函数前缀和
  15. 智慧校园解决方案:一站式解决校园数字化转型难题
  16. BPM软件是什么?BPM软件跟BPA有关联吗?
  17. mysql mycat水平分库_MyCat水平分库
  18. 关于淘宝 TOP 开发 使用的一些心得,问题不断更新中。。。
  19. Java - Java子类继承父类并调用接口
  20. MT4如何使用软件开展自动交易详细步骤

热门文章

  1. android 录屏流程以及权限管理(底层权限修改及讲解)
  2. 什么是CAD?为什么要进行CAD格式转换?怎么转JPG图片?
  3. MySQL多表关联关系与多表关联查询
  4. 大数据系列之数据仓库Hive原理
  5. 学习笔记 | TNNLS 2022 THPs:学习事件序列因果结构的拓扑霍克斯过程
  6. TextRank算法学习及使用
  7. 蓝牙模块硬件设计参考
  8. 如何理解GMM模型及应用
  9. 雷军周鸿祎两冤家喝茶和解
  10. IT中的DEV SIT UAT PET SIM PRD 都是什么意思?