B-树
B-树就是B树,普通节点也存数据
特点:
1. 根结点的儿子数为[2, M]
2. 除根结点以外的非叶子结点的儿子数为[M/2, M]
3. 每个结点存放至少M/2-1(取上整)和至多M-1个关键字(至少2个关键字)
4. 非叶子结点的关键字个数=指向儿子的指针个数-1
5. 所有叶子结点位于同一层
B+树
只有叶子节点才存数据,非叶节点只存储关键字,非叶子节点所能保存的关键字大大增加,树的高度降低,磁盘IO次数减少
应用:mysql索引的一种(聚簇和非聚簇索引)
特点:
1. 非叶子结点的子树指针与关键字个数相同
2. 为所有叶子结点增加一个链指针,有利于数据库做全表扫描
B*树
B+树的变体,非叶子节点和根节点之间也加入了指向兄弟节点的指向
特点:
1. 在B+树基础上,为非叶子结点也增加链表指针
2. B+树初始化的关键字初始化个数是cei(m/2),b树的初始化个数为(cei(2/3m),将结点的最低利用率从1/2提高到2/3
B树和B+树谁更快?
-
如果可以一次性将数据全部加载内存中的话,则B树比B+树稍微快一点点(因为当从根节点往下走的时候有可能直接拿到值)
-
如果需要将数据多次加载到内存的话,则B+树的优势就体现出来了