b树,以及b+树的构建,以及mysql底层索引的原理
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