B-Tree:
M阶的Btree的几个重要特性:
1.节点最多含有m颗子树(指针),m-1个关键字(数据)(m>=2);
2.除根节点和叶子节点外,其他每个节点至少有ceil(m/2)个子结点(子树),ceil为向上取整,5/2=3取整,分裂的时候从中间分开,分成两个子树
3.若根节点不是叶子节点,则至少有两颗子树。
Btree有个非常重要的操作:当一颗树不满足以上性质的时候会干嘛?红黑树大家已经知道了会左旋右旋变颜色。而是Btree的分裂。
分裂过程如图:
b树减少了磁盘IO的,增加了查询效率。最重要的是分裂过程构建b树。
缺点是:不能解决范围查询,以及所有点都存数据造成空间浪费,所以MySQL最终选择了b+树
b+树:
b+树的3个性质:
1.叶子结点通过双向链表连接
2.非叶子结点不存放数据
3.数据和节点一样多
通过图可以看出b+树和b树的区别:
MySQL底层索引:
MySQL底层索引就是采用b+树的结构,大量减少磁盘IO次数,充分存储了数据。
通过双向链表解决了索引的范围查询
节点存储多个索引,符合了联合索引的左原则。
通过索引关键字的个数及大小,以及页面大小(一次IO查询的数据量),可以计算b+树的阶数
b+树的特点总结:
总结:
来源:CSDN
作者:FunnySour
链接:https://blog.csdn.net/qq_36767214/article/details/104677714