B-Tree

定义

B树是一个多路的平衡查找树,所谓多路就是多叉,它是一种专门为磁盘等外置存储设备而设计的一种数据结构

一颗m阶的B树(m叉树或者m路树)满足如下性质:

  1. 每个节点最多包含m个孩子(m>=2)
  2. 除根节点和叶子节点外,其它每个节点至少有ceil(m/2)个孩子
  3. 若根节点不是叶子节点,至少有两个孩子
  4. 所有叶子节点都出现在同一层
  5. 每个非叶子节点包含n个关键字信息(P1,K1,P2,K2...,Kn-1,Pn),其中K(1 - n-1)为顺序排列的关键字,P(1-n)为指向子节点的指针,并满足P(i-1)子树所有关键字<= Ki <=P(i+1)子树所有关键字

例子

3路B树


image.png
  1. 查找
    以查找79关键字为例
  • 从磁盘读取磁盘块1,79 > 35 所以,数据在P3指向的子节点里
  • 从磁盘读取磁盘块4,65 < 79 < 87,数据在P2指向的子节点里
  • 从磁盘读取磁盘块10,遍历即可找到79

可以看到磁盘IO的次数明显降低,我们知道默认InnoDb存储引擎每个页大小为16KB,而一个关键字信息加上指针信息一般为16B,但是每个关键字还包含着对应的记录的信息,这部分大小不定,可知InnoDb一次读取的磁盘块大概包含16KB/(16B+未知大小),存储的关键字不多,所以也就导致深度会增加,因此InnoDb索引的存储使用的另外一种结构B+Tree

  1. 插入
    生成从空树开始,从一个空节点插入m-1个关键字,当关键字数大于m-1时,则进行分裂,分裂方式是将中间节点升级为父节点,左右分别形成单独节点,依次重复上述步骤
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.什么是索引? 索引:加速查询的数据结构。 2.索引常见数据结构: #1.顺序查找: 最基本的查询算法-复杂度O...
    极简架构阅读 40,897评论 16 96
  • B树是一种多路自平衡搜索树,它类似普通的二叉树,但是B书允许每个节点有更多的子节点。B树示意图如下: B树的特点:...
    舒小贱阅读 45,715评论 3 38
  • B树(B-Tree)是一种自平衡的树,能够保证数据有序.同时它还保证了在查找、插入、删除等操作时性能都能保持在$O...
    SylvanasSun阅读 497评论 0 0
  • 前段时间我一个从小玩到大的朋友结婚了,在这之前她也有过几个男朋友,有意思的是她和她的上一任男朋友连结婚照都拍了,可...
    介意我抽支烟么阅读 117评论 0 0
  • 自科比宣布退役,其实湖人已经进入了后科比时代 ,只不过科比的赛季巡演将湖人的重建时间稍微拖久了一些。有人会去谴责科...
    朱萧默说阅读 467评论 0 6