【数据库】联合索引的最左匹配原则理解

2023-05-16

索引是基于B+树实现,所以这个最左匹配原则肯定要站在B+树的角度上来思考。

首先我们看一下单个索引的B+树:

如上图,一颗B+树根据一个值来构建,很容易理解索引的使用。

假如是联合索引的话,我们可以想象一下将上图中的关键字"5"变成一个元组(x,y,....),在这种情况下,B+树会依据元组中左边的字段来构建。借助其他博主的图来帮助说明一下,如下图:

上图中构建了一个(X,Y)的联合索引。我们可以从图中看到:叶节点中X的值是有序的:1,1,2,2,3,3; 而Y的值是无序的:1,2,1,4,1,2。所以,单独使用Y列作为条件是无法利用索引的,因为Y列是无序的。

但是在X列的基础上,Y列的值又是有序的,不过这种有序是相对于X列的,所以在X列确定的情况下,Y列可以利用索引。

例如:X=1 and Y=2 这种情况下,X确定,Y是有序的,可以利用索引进行查找;当X>1 and Y=2时,X列可以利用索引,但是在X>1这个范围内,Y是无序的,所以Y列不能利用索引。

所以最左匹配原则遇上范围查询就会停止,剩下的字段都无法使用索引。

最左匹配原则:最左优先,以最左边的为起点任何连续的索引都能匹配上。同时遇到范围查询就会停止匹配。

下面进行假设和举例:

假设建立联合索引(X,Y,Z)

1. 全值匹配时:


select * from table1 where X = 1 and Y = 2 and Z = 3 
select * from table1 where X = 1 and Y = 2 and Z = 3 
select * from table1 where X = 1 and Y = 2 and Z = 3 
......

上面的查询用到了索引,因为有Mysql查询优化器,优化器会调整sql语句的顺序,使之达到最高的执行效率。所以where语句中的条件的顺序不影响索引的使用。

2. 匹配索引中最左边的列时:


select * from table1 where X = 1 
select * from table1 where X = 1 and Y = 2  
select * from table1 where X = 1 and Y = 2 and Z = 3

上述查询从最左边开始连续屁屁额,使用了索引

3. 没有最左边字段的查询时:


select * from table1 where Y = 2 
select * from table1 where Z = 3 
select * from table1 where Y = 2 and Z = 3  

上述查询没有最左列,所以使用的是全表扫描。

4. 不连续时:

select * from table1 where X = 1 and Z = 3 

只使用了X列的索引,后续没有使用索引。

5. 匹配范围值:

select * from table1 where  X > 1 and X < 3 and Y > 1;

进行范围查找时,只有对联合索引最左列进行范围查询才能使用索引。例如上述sql,在1<X<3的范围内,X的值是有序的,所以可以使用索引,但是在1<X<3范围内,Y的值是无序的,不能使用索引。

 

最后:

在使用联合索引时,where语句中需要包含联合索引中最左列的确定条件,方可用到联合索引。

(本篇文章有参考,但也包含个人理解,所以列为原创文章,也不知道讲清楚了没有)

(文中图片和例子(还有其他例子未移入)出自:https://blog.csdn.net/sinat_41917109/article/details/88944290)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【数据库】联合索引的最左匹配原则理解 的相关文章

随机推荐

  • 51单片机 串口12864显示驱动

    include lt reg52 h gt define uchar unsigned char define uint unsigned int sbit CS 61 P2 5 片选信号 xff08 RS xff09 sbit SID 6
  • Nginx https 配置步骤,免费证书申请

    第一步 xff1a http aq chinaz com SSL 需要先注册登录站长工具 第二步 xff1a 填写域名信息 xff0c xff08 设置的密钥密码要记住 xff0c 在第五步时需要用到 xff09 第三步 xff1a 选择手
  • C/C++分割字符串: strtok函数

    C语言如何实现将字符串ABCD efgh i1234 David Julie Susan中 和 分隔开的几个字串ABCD efgh i1234 David Julie Susan取出来 xff1f 有个函数叫 strtok span cla
  • 浅谈用Google Scholar查找并获取外文文献的技巧和方法

    一 Google Scholar是什么 Google Scholar是Google于2004年底推出的专门面向学术资源的免费搜索工具 xff0c 能够帮助用户查找包括期刊论文 学位论文 书籍 预印本 文摘和技术报告在内的学术文献 xff0c
  • 常见的字符串处理函数strstr,strlen,strtok

    字符串处理 strstrstrlenstrtokstrchrstrcpystrcmpstrcatsprintfbzeromemsetmemcpymemcmperrno strstr span class token function str
  • Vscode+MinGW配置C++开发环境(解决版本过老和在线下载极慢问题)

    文章目录 准备电脑MinGW的编译器环境安装注意 配置Path环境路径VScode 安装C C 43 43 拓展配置运行 xff08 多数配置直接被VSCODE自动生成 xff09 准备电脑MinGW的编译器环境 为什么选择MinGW xf
  • Python——alembic数据库ORM模型的迁移与映射

    Python alembic数据库ORM模型的迁移与映射 alembic 作用 xff1a 方便数据库与ORM模型的迁移与映射 alembic 安装 xff1a pip install alembic alembic 用法 xff1a 1
  • 解决VNC远程连接树莓派,窗口显示不全的问题,亲测可行!!

    哇 xff0c 就在刚刚才百度到解决VNC远程连接树莓派 xff0c 窗口显示不全的问题 xff0c 昨晚上查了一晚上都没搞定 xff0c xff0c xff0c 首先说下问题吧 xff0c 就是用VNC远程连接树莓派后 xff0c 会出现
  • Kotlin Parameter specified as non-null is null

    报错信息如下 span class hljs label java lang IllegalArgumentException span Parameter specified as non null is null method kotl
  • 如何获取维普免费账号--应对大家工作后在校外下载维普万方等全文

    马上就要工作了 xff0c 觉得学校里面图书馆资料很多 xff0c 并且很有用 xff0c 都可以在CNKI 万方维普等中文数据库 xff0c 和SD EBSCO SpringerLink等西文数据库中下载全文 xff0c 但是仅仅限于校内
  • Ubuntu下搭建samba服务

    Samba服务器和NFS差不多 xff0c Samba是在Windows操作系统下访问Linux主机 xff0c NFS可以让Linux客户端访问NFS服务器 xff0c NFS服务器可以使用Windows搭建也可以使用Linux搭建 xf
  • VsCode打不开终端

    VsCode打不开终端 问题现象解决办法 问题现象 解决办法 打开设置 输入 integrated 并打开 settin json 插入对于终端路径设置 代码如下 xff1a 34 terminal integrated shell win
  • VMware虚拟机中的Ubuntu图形界面蓝屏问题

    VMware虚拟机中的Ubuntu图形界面蓝屏问题 因为某次暴力关机后 xff0c 进入Ubuntu时发现蓝屏 xff0c 界面显示不正常 xff0c 但Ctrl 43 alt 43 F4后可以进入命令行 xff0c 说明系统正常只是图形界
  • GD32F205在IAR上移植FreeRTOS

    目录 简述 xff1a 第一步 xff1a 准备最简工程与系统第二步 xff1a 拷贝源码第三步 xff1a 编译器IAR配置第四步 xff1a 工程代码修改第五步 xff1a 编译工程 简述 xff1a 1 主芯片 xff1a GD32F
  • vscode之C/C++代码自动补全

    目录 准备 xff1a 步骤 xff1a 安装插件重启加载更改配置选项找到 设置 打开json配置添加配置json保存并重新打开vscode即可自动补全 准备 xff1a IDE xff1a vscode 安装就不展开啦 步骤 xff1a
  • git生成公钥

    平台 xff1a Windows 打开git bash 随便在一个目录下右键 xff0c 选择 Git Bash Here 生成公钥命令 ssh keygen t rsa C your email 64 example com 备注 xff
  • CentOS安装arm-linux-gcc交叉编译器

    xff08 注 xff1a 首先需要明确需要安装centos系统的位数 xff0c 即是32位的还是64位的 xff09 1 下载并解压文件 xff1a 下载arm linux gcc 4 4 3 tgz到任意的目录下 xff0c 进入这个
  • STM32F107之CAN配置

    STM32F107属于STMF10x系列的互联型产品 xff0c 所以配有2个CAN模块即CAN1和CAN2 CAN模块正常工作模式和测试模式 xff0c 且测试模式又分为环回模式 静默模式和环回静默模式 xff0c 但一般都使用正常工作模
  • 元学习基本概念笔记

    元学习是深度学习领域最活跃的研究领域之一 人工智能 xff08 AI xff09 社区中的一些思想流派赞成这样的论点 xff0c 即元学习是解锁人工智能 xff08 AGI xff09 的垫脚石之一 近年来 xff0c 我们已经看到了元学习
  • 【数据库】联合索引的最左匹配原则理解

    索引是基于B 43 树实现 xff0c 所以这个最左匹配原则肯定要站在B 43 树的角度上来思考 首先我们看一下单个索引的B 43 树 xff1a 如上图 xff0c 一颗B 43 树根据一个值来构建 xff0c 很容易理解索引的使用 假如