这是我参与「第五届青训营 」伴学笔记创作活动的第 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+树。