B树,也加B-(-连接符)树也被认为n叉搜索树
图示如下
当节点的子树多了,节点保存的key多了,意味着在同样key的前提下B树的高度比二叉搜索树低很多
此时访问磁盘的次数就更少.
B+树在B树的基础上又走出改进 也被成为n叉搜索树
图示如下
此为Mysql存储数据的方式
B+树的特点
1.一个节点可以存储n个key值, 那么其可以划分n个区域;
2.每个节点的key值都会在子节点存在,并且是当前子节点的最大值;
3.B+树的叶子节点都是首尾相连,类似一个链表;
4.由于叶子节点是一个完整的数据集合,只在叶子节点存储数据表每一行的数据,而非叶子节点只存储key的值.
B树的优势
1.当一个节点保存多个key时,最终树的高度相对更低,减小了硬盘的访问次数;
2.最终所有的查询都会落到叶子结点(查询任何的一个数据经过的硬盘访问次数是一样的);
(这个稳定很是关键,能让程序员对程序的执行效率有一个更准确的评估)
3.B+树的所有叶子结点构成一个链表,比较方便进行范围查找;
(当要查询ID >13 并且 < 60 的同学 只需要找到13和60的位置,从13沿着链表遍历到60,中间结果即为所需,非常高效)
4.由于数据都在叶子节点上非叶子结点只存储key的值,导致非叶子节点占用的空间是比较小的这些非叶子结点就可能在内存中缓存(或缓存一部分)从而减少了硬盘访问的次数
(假设一个整数按四个字节估算,10亿这样的整数占据多大的内存 --- 10亿这样的key才4G不到)