B树的缺点: 1.B树节点既存储了索引(主键),又存储了对应的地址

优化:在内部非终端节点中只存储索引(主键),
在终端节点中既存储索引(主键),又存储对应的地址

2.B树不支持区间查询
优化:让终端节点形成链表,支持区间查询

3.B树查找效率不稳定
优化:B+树查找效率稳定

B+树在B树基础上进行改进。

m阶B+树的性质: 1.有序性 2.其节点中最多有m个关键字和m个孩子———>父亲节点是孩子节点的索引 3.节点中最少要有ceil(m/2)个关键字和孩子 4.终端节点保存所有的关键字和真实数据,并且终端节点之间要有指针相连 4.非终端节点只保存关键字,终端节点保存真实数据

B+树的操作 1.查找 (1)单点查找 注意要找到终端节点上(相等时判断孩子是否为空,为空则为终端节点) (2)区间查找 [l,r],先对左边界数据进行单点查找,再沿着终端节点之间的指针进行顺序遍历 2.插入 和B树类似,先查找到插入位置—->插入—->判断是否超过上限,超过则分裂 (1)单点查询插入位置 (2)把数据插入到终端节点上 (3)判断插入节点的关键字个数是否>m,如果大于,分裂上传 特殊情况:如果插入的是节点中的最大值,其父亲的关键字(索引数据)要发生改变

    注:为了更加实用,忽略掉特殊情况,一棵m阶B+树,其非终端节点关键字个数最多可以是m-1个

3.删除
    和B树类似,先查找删除位置--->删除---->判断是否低于下限,低于则调整
    (1)查找删除数据(在终端节点上)
    (2)删除,如果删除的是节点中的最大值,记得向上修改父亲节点
    (3)判断删除节点中的关键字个数是否<ceil(m/2),如果小于:
        1.兄弟够借,则借
        2.兄弟不够借,则合并

应用场景:数据库 外存管理