MySQL中B+树索引的作用是什么

发布时间:2021-08-03 16:37:50 作者:Leah
来源:亿速云 阅读:151

本篇文章给大家分享的是有关MySQL中B+树索引的作用是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

树的简介

树的简介

树跟数组、链表、堆栈一样,是一种数据结构。它由有限个节点,组成具有层次关系的集合。因为它看起来像一棵树,所以得其名。一颗普通的树如下:

MySQL中B+树索引的作用是什么

树是包含n(n为整数,大于0)个结点, n-1条边的有穷集,它有以下特点:

一些有关于树的概念:

树的种类

MySQL中B+树索引的作用是什么

按照有序性,可以分为有序树和无序树:

按照节点包含子树个数,可以分为B树和二叉树,二叉树可以分为以下几种:

B-树、B+树简介

B-树简介

B-树,也称为B树,是一种平衡的多叉树(可以对比一下平衡二叉查找树),它比较适用于对外查找。看下这几个概念哈:

一颗m阶的B-树,有以下特征:

一棵简单的B-树如下:

MySQL中B+树索引的作用是什么

B+ 树简介

B+树是B-树的变体,也是一颗多路搜索树。一棵m阶的B+树主要有这些特点:

一颗3阶的B+树如下:

MySQL中B+树索引的作用是什么

B+树和B-树的主要区别如下:

B+树的插入

B+树插入要记住这几个步骤:

以一颗4阶的B+树为例子吧,4阶的话,关键值最多3(m-1)个。假设插入以下数据43,48,36,32,37,49,28.

1.在空树中插入43

MySQL中B+树索引的作用是什么

这时候根结点就一个关键值,此时它是根结点也是叶子结点。

2.依次插入48,36

MySQL中B+树索引的作用是什么

这时候跟节点拥有3个关键字,已经满了

3.继续插入 32,发现当前节点关键字已经不小于阶数4了,于是分裂 第⌈4/2⌉=2(下标0,1,2)个,也即43上移到父节点。

MySQL中B+树索引的作用是什么

4.继续插入37,49,前节点关键字都是还没满的,直接插入,如下:

MySQL中B+树索引的作用是什么

5.最后插入28,发现当前节点关键字也是不小于阶数4了,于是分裂,于是分裂, 第  ⌈4/2⌉=2个,也就是36上移到父节点,因父子节点只有2个关键值,还是小于4的,所以不用继续分裂,插入完成

MySQL中B+树索引的作用是什么

B+树的查找

因为B+树的数据都是在叶子节点上的,内部节点只是指针索引的作用,因此,查找过程需要搜索到叶子节点上。还是以这颗B+树为例吧:

MySQL中B+树索引的作用是什么

B+ 树单值查询

假设我们要查的值为32.

第一次磁盘 I/O,查找磁盘块1,即根节点(36,43),因为32小于36,因此访问根节点的左边第一个孩子节点

MySQL中B+树索引的作用是什么

第二次磁盘 I/O, 查找磁盘块2,即根节点的第一个孩子节点,获得区间(28,32),遍历即可得32.

MySQL中B+树索引的作用是什么

动态图如下:

MySQL中B+树索引的作用是什么

B+ 树范围查询

假设我们要查找区间 [32,40]区间的值.

第一步先访问根节点,发现区间的左端点32小于36,则访问根节点的第一个左子树(28,32);

MySQL中B+树索引的作用是什么

第二步访问节点(28,32),找到32,于是开始遍历链表,把[32,40]区间值找出来,这也是B+树比B-树高效的地方。

MySQL中B+树索引的作用是什么

B+树的删除

B+树删除关键字,分这几种情况

如果关键字个数大于⌈m/2⌉,直接删除即可;

假设当前有这么一颗5阶的B+树

MySQL中B+树索引的作用是什么

如果删除22,因为关键字个数为3 > ⌈5/2⌉-1=2, 直接删除(⌈⌉表示向上取整的意思)

MySQL中B+树索引的作用是什么

如果关键字个数大于⌈m/2⌉-1,并且删除的关键字存在于父子节点中,那么需要相应调整父子节点的值

MySQL中B+树索引的作用是什么

如果删除20,因为关键字个数为3 > ⌈5/2⌉-1=2,并且20是当前节点的边界值,且存在父子节点中,所以删除后,其父子节点也要响应调整。

MySQL中B+树索引的作用是什么

如果删除该关键字后,关键字个数小于⌈m/2⌉-1,兄弟节点可以借用

以下这颗5阶的B+树,

MySQL中B+树索引的作用是什么

如果删除15,删除关键字的结点只剩1个关键字,小于⌈5/2⌉-1=2,不满足B+树特点,但是其兄弟节点拥有3个元素(7,8,9),可以借用9过来,如图:

MySQL中B+树索引的作用是什么

在删除关键字后,如果导致其结点中关键字个数不足,并且兄弟结点没有得借用的话,需要合并兄弟结点

以下这颗5阶的B+树:

MySQL中B+树索引的作用是什么

如果删除关键字7,删除关键字的结点只剩1个关键字,小于⌈5/2⌉-1=2,不满足B+树特点,并且兄弟结点没法借用,因此发生合并,如下:

MySQL中B+树索引的作用是什么

主要流程酱紫:

所以删除关键字7后的结果如下:

MySQL中B+树索引的作用是什么

B+树经典面试题

InnoDB一棵B+树可以存放多少行数据?

这个问题的简单回答是:约2千万行。

MySQL中B+树索引的作用是什么

因为B+树叶子存的是数据,内部节点存的是键值+指针。索引组织表通过非叶子节点的二分查找法以及指针确定数据在哪个页中,进而再去数据页中找到需要的数据;

MySQL中B+树索引的作用是什么

假设B+树的高度为2的话,即有一个根结点和若干个叶子结点。这棵B+树的存放总记录数为=根结点指针数*单个叶子节点记录行数。

因此,一棵高度为2的B+树,能存放1170 * 16=18720条这样的数据记录。同理一棵高度为3的B+树,能存放1170 *1170 *16  =21902400,也就是说,可以存放两千万左右的记录。B+树高度一般为1-3层,已经满足千万级别的数据存储。

为什么索引结构默认使用B+树,而不是B-Tree,Hash哈希,二叉树,红黑树?

简单版回答如下:

B-树和B+树的区别

以上就是MySQL中B+树索引的作用是什么,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。

推荐阅读:
  1. MySQL 索引B+树原理以及建索引的几大原则是什么
  2. MySQL使用B+树作为索引结构的原因

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

mysql

上一篇:SQL中怎么生成一张日期维度表

下一篇:如何解决某些HTML字符打不出来的问题

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》