b树,以及b+树的构建,以及mysql底层索引的原理

 ̄綄美尐妖づ 提交于 2020-03-05 18:07:56

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+树的特点总结:

 

总结:

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!