数据库索引数据结构-B树

1、定义

1、根节点至少包含两个孩子
2、树中每个节点最多含有m个孩子(m>=2)
3、除根节点和叶节点外,其他每个节点至少有ceil(m/2)个孩子
4、所有叶子都位于同一层
5、如下图:
数据库索引数据结构-B树
数据库索引数据结构-B树

2、查找

B-Tree作为一个平衡多路查找树(m-叉)。B树的查找分成两种:一种是从一个结点查找另一结点的地址的时候,需要定位磁盘地址(查找地址),查找代价极高。另一种是将结点中的有序关键字序列放入内存,进行优化查找(可以用折半),相比查找代价极低。而B树的高度很小,因此在这一背景下,B树比任何二叉结构查找树的效率都要高很多。而且B+树作为B树的变种,其查找效率更高。

3、插入

B-Tree的插入会发生结点的分裂操作。当插入操作引起了s个节点的分裂时,磁盘访问的次数为h(读取搜索路径上的节点)+2s(回写两个分裂出的新节点)+1(回写新的根节点或插入后没有导致分裂的节点)。因此,所需要的磁盘访问次数是h+2s+1,最多可达到3h+1。因此插入的代价是很大的。

4、删除

B-Tree的删除会发生结点合并操作。最坏情况下磁盘访问次数是3h=(找到包含被删除元素需要h次读访问)+(获取第2至h层的最相邻兄弟需要h-1次读访问)+(在第3至h层的合并需要h-2次写访问)+(对修改过的根节点和第2层的两个节点进行3次写访问)。

5、小结

由于考虑磁盘储存结构,B树的查找、删除、插入的代价都远远要小于任何二叉结构树(读写磁盘次数的降低)。
注:
B+Tree更适合用来做存储索引
1、B+树的磁盘读写代价更低
2、B+树的查询效率更加稳定
3、B+树更有利于数据库的扫描