B树索引文件c语言,B树B+树以及索引

先看B树的特征:

假设一棵m阶的B树(一棵B树一个节点最后有m个子树,则m为B树的阶)

1.根节点特征分两种情况:

- 第一种:一棵树就只有一个根节点。

- 第二种:根节点的孩子个数为2~m个

2.非根非叶的中间任一结点的特征:

- 孩子个数:[m/2]~m个

- 关键字个数n:[m/2]-1 <= n <=m-1

- 非叶节点中的信息包括[n,A0,K1,A1,K2,A2,…,Kn,An],其中n表示该节点中保存的关键字个数,K为关键字且Ki

3.叶子结点特征:

-叶子节在相同的层,并且这些节点不带信息,实际上这些节点就表示找不到指定的值,也就是指向这些节点的指针为空。

4.B树的高度的计算

先讨论深度为L+1的m阶B树的高度

根据B树的定义,根节点至少有一个节点,第二层至少2个结点,第三层至少为2([m/2])个结点,第L+1层 至少有2((m/2)^L-1)个结点,而L+1为叶子节点,若m阶B-树有N个关键字,则叶子节点个数为N+1

则有N+1 ≥2*((m/2)^L-1),则L ≤ log┌m/2┐((N+1)/2 )+1

《参考自 数据结构C语言版》

B+树的特征

1.有n棵子树的节点含有n个关键字

2.所有的叶子节点包含了全部的关键字,及指向含这些关键字记录的指针,且叶子节点本身 根据关键字自小而大顺序连接(而B 树的叶子节点并没有包括全部需要查找的信息)

3.非叶子节点可以看成索引部分,节点中仅含有其子树(根节点)中的最大(或最小)关键字(而B 树的非终节点也包含需要查找的有效信息)

为什么说B+树比B树更适合用作数据库的索引

1) B+tree的磁盘读写代价更低

B+树的内部结点并没有指向关键字具体信息的指针。因此其内部结点相对B 树更小。如果把所有同一内部结点的关键字存放在同一盘块中,那么盘块所能容纳的关键字数量也越多。一次性读入内存中的需要查找的关键字也就越多。相对来说IO读写次数也就降低了。

2) B+-tree的查询效率更加稳定

由于非终结点并不是最终指向文件内容的结点,而只是叶子结点中关键字的索引。所以任何关键字的查找必须走一条从根结点到叶子结点的路。所有关键字查询的路径长度相同,导致每一个数据的查询效率相当。

3)范围查询更简便

索引

扇区:磁盘的最小存储单位;

磁盘块:文件系统读写数据的最小单位;

页:内存的最小存储单位;

数据库系统的设计者巧妙利用了磁盘预读原理,将一个节点的大小设为等于一个页,这样每个节点只需要一次I/O就可以完全载入。为了达到这个目的,在实际实现B-Tree还需要使用如下技巧:每次新建节点时,直接申请一个页的空间,这样就保证一个节点物理上也存储在一个页里,加之计算机存储分配都是按页对齐的,就实现了一个node只需一次I/O

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值