InnoDB的B+ Tree实现 | 青训营笔记

202 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天

B-树和B+树

B+树主要和B-树相对比,在此之前先介绍B-树

B-树

B-Tree,多路平衡树。与普通二叉树的区别是:一个树节点可以存多个数据

与红黑树的区别是:BTree的平衡不是通过旋转变色来实现,而是通过向下分裂来实现。

相对于二叉树索引:

①由于一个树节点可以存储多个数据,有效的缩小了树的深度。

②通过向下分裂,保持平衡,避免退化成一条链表

B+树

也是一种多路平衡树。它和BTree的区别是:

①在结构上,B+Tree的所有叶子节点是一条链表,而BTree的叶子节点就是单纯的叶子节点

②在数据存储上,B+Tree的叶子节点链表存储着所有的节点数据,从小到大排序

实现原理

B+Tree 基本特征

B+树结构有基本特点:
①多路节点
②一个树节点中,有多个数据,数据个数大于等于N时,分裂成三部分:左、中、右,这三部分变成三个树节点,中间树节点成为左右两部分的父节点。
③所有叶子节点形成一条有序链表
④所有数据都在叶子节点上

大体结构设计

①一个树节点看作一个类;
②树节点类里面有多个数据元素节点,数据元素看作一个类;
③树节点类中有父节点指针
④数据元素节点中有左右子树节点指针。我设计的是同一个树节点内,左边第一个元素节点左右可能都有树节点,其他元素节点只有右边有子树节点
⑤叶子节点中维护了一个前后叶子节点的指针,从而形成一条链表

InnDB索引

InnoDB的数据文件本身就是索引文件

表数据文件本身就是按B+Tree组织的一个索引结构,该树的叶节点data域保存了完整的数据记录。

索引的key:数据表的主键,因此InnoDB表数据文件本身就是主索引。

InnoDB主索引(也是数据文件)

InnoDB表都根据主键顺序以索引形式存放,该存储方式的表称为索引组织表。而InnoDB又使用的B+树索引模型,所以数据都是存储于B+树。每一个索引在InnoDB里面就对应一棵B+树。