mysql联合索引的底层原理_聚集索引原理

mysql联合索引的底层原理_聚集索引原理面试中被问到了联合索引,突然就涉及到了知识盲区,对不起,我只知道B+树,B树,哈希索引,聚簇索引,非聚簇索引,联合索引的原理?。。对不起涉及到了我的知识盲区了。这里对联合索引做一个总结,联合索引,顾名思义,普通的索引我们只会对单个字段去构建索引,又分为主键索引和辅助索引,那么联合索引就是对多个字段去构建索引,从而在某些场景下提升提升查询效率。最左匹配原则提到联合索引,不得不提的就是最左匹配原则所谓最左原则指的就是如果你的SQL语句中用到了联合索引中的最左边…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

面试中被问到了联合索引,突然就涉及到了知识盲区,对不起,我只知道B+树,B树,哈希索引,聚簇索引,非聚簇索引,联合索引的原理?。。

对不起涉及到了我的知识盲区了。

这涉及到了我的知识盲区 憨憨猫表情包_盲区_知识_涉及表情

 

这里对联合索引做一个总结,联合索引,顾名思义,普通的索引我们只会对单个字段去构建索引,又分为主键索引和辅助索引,那么联合索引就是对多个字段去构建索引,

从而在某些场景下提升提升查询效率。

 

最左匹配原则

  提到联合索引,不得不提的就是最左匹配原则

  所谓最左原则指的就是如果你的 SQL 语句中用到了联合索引中的最左边的索引,那么这条 SQL 语句就可以利用这个联合索引去进行匹配,值得注意的是,当遇到范围查询(>、<、between、like)就会停止匹配。

 

假设,我们对(a,b)字段建立一个索引,也就是说,你where后条件为

a = 1
a = 1 and b = 2

是可以匹配索引的,因为他们都遵循了最左匹配原则。但是要注意的是~你执行

b= 2 and a =1

也是能匹配到索引的,有的小伙伴就会有疑问了,这里没有遵循最左匹配原则呀,不用担心,MySQL内部有一个优化器,Mysql的优化器会自动调整a,b的顺序与索引顺序一致。 相反的,你执行

b = 2

就匹配不到索引了。 而你对(a,b,c,d)建立索引,where后条件为

a = 1 and b = 2 and c > 3 and d = 4

那么,a,b,c三个字段能用到索引,而d就匹配不到。因为遇到了范围查询,当遇到范围查询(>、<、between、like)就会停止匹配。!

 

联合索引的原理和数据结构

OK,知道了联合索引的最左匹配原则,那它的数据结构和原理是什么样子的呢。

其实它的结构和普通索引一样,还是B+树,但是细节上还是有些不一致的。

虽然依然是B+树,但联合索引的健值数量不是一个,而是多个。构建一颗B+树只能根据一个值来构建,因此数据库依据联合索引最左的字段来构建B+树。

这里引用一些大神们的图

mysql联合索引的底层原理_聚集索引原理

 

preview

如图所示他们是按照a来进行排序,在a相等的情况下,才按b来排序。

因此,我们可以看到a是有序的1,1,2,2,3,3。而b是一种全局无序,局部相对有序状态! 什么意思呢?

从全局来看,b的值为1,2,1,4,1,2,是无序的,因此直接执行b = 2这种查询条件没有办法利用索引。

从局部来看,当a的值确定的时候,b是有序的。例如a = 1时,b值为1,2是有序的状态。当a=2时候,b的值为1,4也是有序状态。 因此,你执行a = 1 and b = 2是a,b字段能用到索引的。而你执行a > 1 and b = 2时,a字段能用到索引,b字段用不到索引。因为a的值此时是一个范围,不是固定的,在这个范围内b值不是有序的,因此b字段用不上索引。

综上所示,最左匹配原则,在遇到范围查询的时候,就会停止匹配。

所以根据联合索引的最左匹配原则,我们在构建联合索引的时候,要把区分度高的字段,放在最左侧。

 

 

 

 

 

 

 

 

 

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/196950.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 常见视频编码格式解析[通俗易懂]

    常见视频编码格式解析[通俗易懂]常见视频编码格式解析常见视频编码格式解析1.MPEG2-TS编码技术1.1.MPEG-TS简介1.2.基本概念及TS流概述1.3.基本流程1.4.TS流传输包(简称TS包)结构分析1.4.1.TS包包头1.4.2.TS包净荷部分1.5.PS节目流2.MPEG-4编码技术2.1.MPEG-4概述2.2.MPEG-4各部分2.3.MPEG-4层次结构3.H…

    2025年12月7日
    4
  • CMD关闭端口命令「建议收藏」

    CMD关闭端口命令「建议收藏」1.查询端口netstat-ano|findstr”123456″TCP127.0.0.1:12340.0.0.0:0LISTENING67892.查询端口名tasklist|findstr”6789″studio64.exe6789Console…

    2022年7月20日
    29
  • java大数据培训,如何选择适合自己的培训机构开发_大数据培训课程哪个好

    java大数据培训,如何选择适合自己的培训机构开发_大数据培训课程哪个好如何挑选Java大数据培训机构?对于有java的基础的人来说,可以视情况直接跳过java阶段的学习,那么学习时间就可以少一个多月时间,当然前提是基础足够扎实,如果你只是自学了一点java的知识,那么最好还是要从0开始学大数据,选择一家靠谱的Java培训机构。    如何挑选Java大数据培训机构?  想要学好大数据,就要选择好的培训大数据培训机构,那么,如何评判一个培训机构是一个好的培训机构…

    2022年10月21日
    4
  • vi常用命令

    vi常用命令[toc]一、关于vi==========vi是最强大的文本编辑器,没有之一。尽管vi已经是古董级的软件,但还是有无数新人迎着困难去学习,可见其经典与受欢迎的程度。无论是小说中还是电视剧,真

    2022年7月2日
    26
  • 充分不必要条件和必要不充分条件的意思_怎么区分充分必要条件

    充分不必要条件和必要不充分条件的意思_怎么区分充分必要条件转载:https://www.zhihu.com/question/30469121充分条件:只要有A,就一定能达成B,A是B的充分条件。充分不必要条件:有A,一定能达到B;就算没有A,也有可

    2022年8月6日
    9
  • android短信验证码方案,Android开发之属于你的短信验证码(一)

    android短信验证码方案,Android开发之属于你的短信验证码(一)不飞则已,一飞冲天;不鸣则已,一鸣惊人———司马迁最近工作又有新需求,要求用户在注册的时候需要通过手机验证码,这样做的目的是防止用户通过一个邮箱来随便的注册,那么好,今天我们就一起来学习一下Android中的短信验证码这一个知识点。如有谬误,欢迎批评指正,如有疑问欢迎留言,谢谢在说这个知识点前,我们首先来了解下聚合数据一、聚合数据介绍聚合数据是一家国内最大的基础数据API提供商,专业…

    2022年7月25日
    23

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号