B+树也是B树的一种,也是多叉树。
相同点:
- 根结点的至少有1个元素
- 每个结点元素数:m/2 <= k <= m-1 /** m是树的深度 **/
不同点:
- B+树有三种结点:根结点 内部结点 叶子结点
- 内部结点存储索引,不存储数据。
- 叶子结点存储数据
- 内部结点中的key都按照从小到大的顺序排列,对于内部结点中的一个key,左树中的所有key都小于它,右子树中的key都大于等于它。叶子结点中的记录也按照key的大小排列。
- 每个叶子结点都存有相邻叶子结点的指针,叶子结点本身依关键字的大小自小而大顺序链接。
B+树图解:
补充:在数据库中如果B+树叶子结点里面存放的数据是真实数据,则称为聚集索引
如果B+树叶子结点里面存放的是指向真实数据的另一个索引,则称为非聚集索引。
聚集索引是进行一次索引,非聚集索引是进行两次索引。
B树和B+树总结
B+树相对于B树有一些自己的优势,可以归结为下面几点。
- 单一节点存储的元素更多,使得查询的IO次数更少,三层高度可以存放百万数据。所以也就使得它更适合做为数据库MySQL的底层数据结构了。
- 所有的查询都要查找到叶子节点,查询性能是稳定的,而B树,每个节点都可以查找到数据,所以不稳定。
- 所有的叶子节点形成了一个有序链表,更加便于查找。