B 树和 B+ 树

B-Tree,称为 B 树,有人叫 B 减树,这是直译过来的。
B 树是一种多路平衡查找树,每一个节点最多包含 k 个孩子,k 被称为 B 树的阶。k 的大小取决于磁盘页的大小。
特征:

  • 根节点至少有两个子女。
  • 每个中间节点都包含 k-1 个元素和 k 个孩子。
  • 每一个叶子节点都包含 k-1 个元素
  • 所有叶子节点都位于同一层
  • 每个节点中的元素从小到大排列,节点当中 k-1 个元素正好是 k 个孩子包含的元素的值域分化。
    说了这么多,如果你的脑中已经有了 B 树的雏形,那么你不用看下去了,你应该去看更高级的东西。以下只是我的学习。
    我们来看一个 3 阶的 B 树:


    3 阶的 B 树

    它就满足上面所说的那些特征。
    如果现在要插入一个元素 4,那么只能这样:


    插入 4

    有些麻烦,因为 B 树能够为此多路平衡。
    删除的话呢,比如要删除 11:
    删除 11

    发现进行了多次变换。

    接下来看看 B+ 树的特征:

  • 有 k 个子树的中间节点包含 k 个元素(B 树是 k-1 个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点。
  • 所有的叶子节点中包含了全部元素的信息,及指向含这些元素记录的指针,且叶子节点本身依赖关键字的大小自小而大顺序链接。
  • 所有的中间节点元素同时存在于直接点,在子节点元素中是最大(或最小)元素。
    B+ 树

    明白一个概念卫星数据,指的是索引元素指向的数据记录,比如数据库中的某一行。在 B 树中,中间节点还是叶子节点都带有卫星数据。
    B+ 树

    在数据库的聚集索引中,叶子节点直接包含卫星数据。在非聚集索引中,叶子节点带有指向卫星数据的指针
    MySQL 使用 B+ 树作为引擎的数据结构。B+ 树相比 B 树优点:
  1. IO 次数少 2. 查询性能稳定; 3. 范围查询简便。

B 树可以在非叶子节点命中,而 B+ 树只有达到叶子节点才命中。
所有的关键字都出现在叶子节点链表中,且都是有序的

数据库相关

MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址


图片来源于网络

InnoDB的数据文件本身就是索引文件。从上文知道,MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址。而在InnoDB中,表数据文件本身就是按B+Tree组织的一个索引结构,这棵树的叶节点data域保存了完整的数据记录。这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是主索引。


图片来源于网络

InnoDB的所有辅助索引都引用主键作为data域。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 用途:Mysql数据库里面的索引主要基于Hash和B+树。 B-树 (读作B shu,中间不是减号)一句话总结:就...
    徐超Change阅读 5,489评论 1 4
  • 参考:B树和B+树的总结B树、B-树、B+树、B*树都是什么 总结 利用平衡树的优势加快查询的稳定性和速度;B+树...
    小小少年Boy阅读 58,680评论 8 77
  • B树的定义 一棵m阶的B树满足下列条件: 树中每个结点至多有m个孩子。 除根结点和叶子结点外,其它每个结点至少有m...
    文档随手记阅读 14,585评论 0 25
  • 给合作方发一份推广稿件的时候,忽然想到一个问题,每个人都有每个人的处世方式,每个老总也是一样的。我的这位合作方之前...
    堂前花开阅读 3,923评论 4 3
  • 1、爱情永远进行中,婚姻不是爱情的完成时 爱情一直进行中,浪漫不因恋爱关系的确定、夫妻关系的建立而停止。 很多人在...
    vanal阅读 1,527评论 3 0