B+树的特点
1、非叶子节点仅具有索引作用。也就是说,非叶子节点只能储存key不能储存value。
2、树的所有叶子节点构成一个有序链表,可以按照key排序的次序依次遍历全部数据。
B+树存储数据
如果参数M选择为5,那么每个节点最多包含4个键值对,我们以5阶B+树为例,看看B+树的数据存储。
1、在空树中插入5。
2、继续插入8、10、15。
3、继续插入16。
4、继续插入17、18。
5、继续插入6、9、19、20、21、22。
6、继续插入7。
B+树和B树的对比
B+树的优点
1、由于B+树在在非叶子节点上仅当做索引使用,不包含真正的数据,所以在内存相同的情况下B+树能够存放更多的key。
2、B+树的叶子节点都是相连的,因此对整棵树的遍历只需要一次线性遍历叶子节点即可。而且由于数据线性排列并且相连,所以便于区间查找和搜索。而B树则需要进行每一层的递归遍历。
B树的优点
由于B树的每一个节点都包含key和value,因此我们在根据key查找value时,只需要找到key所在的位置就能找到value。但B+树只有叶子节点存储数据,索引每一次查找都必须一层一层一直找到树的最大深度处(即叶子节点的深度)才能找到value。
B+树在数据库中的应用
在数据库的操作中,查询操作可以说是最频繁的一种操作。因此在设计数据库时,必须要考虑查询的效率问题。在数据库中,普遍用到B+树以提高查询效率。为了提高查询效率,我们可以基于某张表的某个字段建立索引,这个索引就是B+树实现的。
未建立主键索引查询
执行 select * from user where id=18 ,需要从第一条数据开始,一直查询到第6条,发现 id=18 ,此时才能够查询出目标结果,共需要比较6次。
建立主键索引查询
区间查询
执行 select * from user where id>=10 and id<=18 ,如果有了索引,由于B+树的叶子节点形成了一个有序链表,所以我们只需要找到 id=12 的叶子节点,按照遍历链表的方式顺序往后查询即可,效率非常高。