二叉树,BST,AVL,红黑树这几种数据结构适用于一次性将所有数据全部加载的场景,并且会随着结点的数量的增加,树的深度也会变得很深,树越深查找效率也就会越低。并且对于Mysql这种将数据存储在磁盘上的场景来说,树的深度代表着磁盘的IO次数,对应也就需要更多的时间消耗。所以这几种数据结构并不适合用在Mysql这种类型的数据库应用场景上。
B树的特点(M阶,M>2):
每个结点可以有多个关键字和多个子结点;
每个结点最多允许有M个子树;
非叶子结点的关键字数量为[ceil(M/2),M-1];
B 树(B Tree)B树的特点允许一个结点上保存多个关键字,这样可以结合磁盘的存储特点,B树中的一个结点对应一个磁盘块,可以使得B树的整体高度降低,数据的查找效率变得更高。
B+树使得树的高度进一步降低,数据查询效率也比B树进一步提高。主要是进行了一下几个部分的修改:
1. (M阶)非叶子结点允许有最多M个子树和最多M个关键字;
2. 非叶子结点中只包含关键字和指向孩子结点的指针(允许结点中存放更多的关键字);
3. 非叶子结点中的关键字会出现在孩子结点结点中(在孩子结点的起始位置:满足有序性);
4. 数据只保存在叶子结点上,并且叶子之间使用双向链表链接(允许范围查找);