MySQL索引底层结构为什么选择B+树

MySQL官网介绍:索引是帮助mysql高效获取数据的排好序的数据结构。简而言之,索引本质是一种优化查询的数据结构。
比较如下一些数据结构的索引,就可以发现其中的缘由。
1.Hash索引
Hash索引把数据以hash形式组织起来,因此查找某一条记录的时候,速度非常快。同时.hash算法的索引有个缺点,因为它不是按照大小排序的。所以,它无法按照范围进行查找。
在这里插入图片描述
2.二叉树结构索引
二叉树的定义:
1.任意节点左子树不为空,则左子树的值均小于根节点的值;
2.任意节点右子树不为空,则右子树的值均大于于根节点的值;
3.任意节点的左右子树也分别是二叉查找树;
4.没有键值相等的节点;
如图:
在这里插入图片描述
很显然,这种结构的树查询最坏的情况就会像一个线性结构,这种结构对I/O的操作次数增加,若想减少查询次数。可以看下最好的状态,平衡二叉树。
3.平衡二叉树索引(AVL)
AVL的必要条件如下:
1.必须是二叉查找树
2,每个节点的左子树和右子树的高度差至多为1
在这里插入图片描述
左边二叉树的节点45左子树高度2,右子树高度0,左右子树高度差为2-0=2,不满足条件二;
右边二叉树的节点均满足左右子树高度差至多为1,同时它满足二叉搜索树的要求,因此它是一棵平衡二叉树。
进一步研究平衡二叉树,如果要查询10,按照AVL的查找方法,则需要对I/0进行四次操作
在这里插入图片描述
而同等数据量的情况下,B树和B+树的查找次数要少。
4.B树的索引结构
1、根节点至少有两个孩子
2、每个非根节点至少有M/2(上取整)个孩子,至多有M个孩子。
3、每个非根节点至少有M/2-1(上取整)个关键字,至多有M-1个关键字。并以升序排列;key[i]和key[i+1]之间的孩子节点的值介于key[i]和key[i+1]之间。
4、所有的叶子结点都位于同一层。
用B树的结构,查找的话,只需要对I/O进行3次操作
在这里插入图片描述
5.B+树
B+树是B树的一个升级版。
新增特性
叶子节点冗余了所有的非叶子节点的key
每个叶子节点增加了一个指向相龄叶子节点的指针
在这里插入图片描述
这里可以看到,虽然这里查找10,也只是和B树一样需要操作3次I/O。但是B+树将所有的非叶子节点的索引都存放在叶子节点,并且还增加了顺序访问的指针,每个叶子节点都有指向相邻叶子节点的指针,这样当其他操作或者大量数据查询时,可以大大减少对I/O磁盘的读取操作。
综上:减少对磁盘的I/O操作,所以选B+树更合适作为数据库的索引。

  • 5
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
B树和B+树都是用于组织和管理数据的树形数据结构,但它们在结构特性和用途上有所不同。以下是它们之间的主要区别: B树: 1. B树是一种自平衡的树,这意味着它能在保持数据有序的同时,提供有效的搜索、插入和删除操作。B树的每个内部节点可以保存多个关键字以及指向子树的链接。 2. B树只有一个根节点,而且除了叶子节点外,所有的节点都是关键字及其指针的列表。每个节点的大小都有限制,以保证树的高度不超过一定值,以提高搜索效率。 3. 由于B树的内部节点可能包含大量的关键字,因此插入和删除操作可能需要跨越多个节点。为了解决这个问题,B树允许分裂和合并操作,以保持树的平衡。 B+树: 1. B+树也是一种自平衡的树,但它与B树的主要区别在于叶子节点上。B树的叶子节点是混合的,可以包含关键字和指针,而B+树的叶子节点仅包含键值和指向相关记录的指针。 2. B+树的叶子节点之间通过共同的关键字建立索引,使得查询可以更高效地通过关键字定位到相应的叶子节点集合。这使得它特别适合用于磁盘上的存储和搜索。 3. 由于叶子节点只包含键值和指针,所以B+树的内部节点可以存储更多的键值,从而减少了搜索时需要访问的叶子节点数量。这有助于提高搜索效率。 选择B+树作为InnoDB的底层数据结构的原因: InnoDB是MySQL数据库的核心存储引擎之一,它使用B+树作为其底层数据结构的主要原因有: 1. 高效搜索和查询:由于B+树结构特性,它能够提供高效的搜索和查询操作。这对于需要频繁查询和搜索的大量数据的系统来说非常重要。 2. 磁盘友好:由于B+树的叶子节点只包含键值和指针,它更适合在磁盘上进行存储和搜索。这使得InnoDB能够更好地利用磁盘I/O性能,从而提高查询性能。 3. 顺序访问:由于B+树的叶子节点之间通过共同的关键字建立索引,它支持顺序访问操作。这对于需要按特定顺序访问数据的场景(如排序、分组等)非常有用。 4. 稳定性和可扩展性:由于B+树结构稳定,且能够通过增加新的叶子节点来扩展存储容量,它适合于大规模数据的存储和检索。 综上所述,B+树作为InnoDB的底层数据结构提供了高效的搜索、查询、顺序访问和可扩展性等优势,使其成为适合用于处理大量数据的数据库存储引擎的理想选择

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

virtuousOne

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值