B树和B+树

172 阅读3分钟

B树:就是为了存储设备或者磁盘设计的一种平衡查找树。 对于一棵M阶的B树

1)树中的每个节点最多有m个孩子

2)除了根节点和叶子节点外,其他节点最少含有m/2(取上限)个孩子

3)若根节点不是叶子节点,则根节点最少含有两个孩子

4)所有叶子节点都在同一层,叶子节点不包含任何关键字信息

B树的插入

1)若B树已存在需要插入的键值时,用新的键值替换旧值;

2)若B树不存在这个值,则在叶子结点进行插入操作;

对于高度为h的m阶B树,新节点一般插在第h层。

判断当前结点key的个数是否小于等于m-1,如果满足,直接插入即可,如果不满足,将结点的中间的key

将这个结点分为左右两部分,中间的结点放到父节点中即可。

B树的删除

1)首先删除叶子节点元素,如果删除之后,叶子节点还是大于m/2,这种情况直接删除即可;

2)对于非叶子节点的删除,我们需要用后继key元素覆盖要删除的元素key,然后再后继key所在的子支

中删除该后继key;

3)如果删除叶子节点,如果删除元素后元素个数少于(m/2),并且它的兄弟节点的元素大于(m/2),

也就是说兄弟节点的元素比最少m/2还多,先将父节点的元素移到该节点,然后将兄弟节点的元素再移

动到父节点。

4)删除叶子结点,先考虑向兄弟节点借元素,借不了的话,首先,还是先将父节点的元素移到该节点,

然后,将当前节点及它的兄弟节点中的key合并,形成一个新的节点。

B+树

与B树的相似点

根节点至少一个元素

非根节点元素范围:m/2<=k<=m-1

插入操作:

当节点元素数量大于m-1的时候,按中间元素分裂成左右两部分,中间元素分裂到父节点当做索引存

储,但是,本身中间元素还是分裂右边这一部分的。

show create table TABLE_NAME;

对于一棵M阶的B树

1)树中的每个节点最多有m个孩子

2)除了根节点和叶子节点外,其他节点最少含有m/2(取上限)个孩子

3)若根节点不是叶子节点,则根节点最少含有两个孩子

4)所有叶子节点都在同一层,叶子节点不包含任何关键字信息。

1)若B树已存在需要插入的键值时,用新的键值替换旧值;

2)若B树不存在这个值,则在叶子结点进行插入操作;删除操作

因为叶子节点有指针的存在,向兄弟节点借元素时,不需要通过父节点了,而是可以直接通过兄弟节点

移动即可(前提是兄弟节点的元素大于m/2),然后更新父节点的索引;如果兄弟节点的元素不大于

m/2(兄弟节点也没有多余的元素),则将当前节点和兄弟节点合并,并且删除父节点中的key。

B树相对于B+树的优点是,如果经常访问的数据离根节点很近,而B树的非叶子节点本身存在有关键字及

其数据的地址,所以这种数据检索的时候会比B+树快。

B+树(InnoDB、MyISAM使用B+树作为索引): 所有的数据都保存在叶子上,能出现重复节点 ,自动

隐藏索引;

区别:B+可以出现重复节点,B-树不能出现重复节点

B+树矮胖,B-树高瘦

B+树通过最下面叶子结点的链表进行查找

B+树的节点包含特征索引,B-树仅包含数据