B树及B+树

B树

特色:B树中全部结点的孩子结点最大值称为B树的阶,一般用m表示。mysql

参看
B树详解 数据与结构
漫画:什么是B树

1.根结点至少有两个子女。
2.每一个中间节点都包含k-1个元素和k个孩子,其中 m/2 <= k <= m
3.每个叶子节点都包含k-1个元素,其中 m/2 <= k <= m
4.全部的叶子结点都位于同一层。
5.每一个节点中的元素从小到大排列,节点当中k-1个元素正好是k个孩子包含的元素的值域分划。sql

举个例子:m=3
1.根结点至少有两个子女。
2.每一个中间节点都包含k-1个元素和k个孩子,其中 m/2 <= k <= m (2<=m<=3; ceil)
3.每个叶子节点都包含k-1个元素,其中 m/2 <= k <= m (2<=m<=3; )
4.全部的叶子结点都位于同一层。
5.每一个节点中的元素从小到大排列,节点当中k-1个元素正好是k个孩子包含的元素的值域分划。(k=2 或者 k=3)数据库

mysql的innodb引擎的索引原理B+树

参考 https://www.jianshu.com/p/1f2...

特色:
1.有k个子树的中间节点包含有k个元素(B树中是k-1个元素),每一个元素不保存数据,只用来索引,全部数据都保存在叶子节点。
2.全部的叶子结点中包含了所有元素的信息,及指向含这些元素记录的指针,且叶子结点自己依关键字的大小自小而大顺序连接。
3.全部的中间节点元素都同时存在于子节点,在子节点元素中是最大(或最小)元素。性能

卫星数据:索引元素指向的数据记录,如数据库表的某一行。在B树不管叶子节点和中间节点都带卫星数据,而B+树中只有叶子节点带卫星数据,其他中间节点仅仅是索引,没有任何的数据关联。.net

在数据库的汇集索引(Clustered Index)中,叶子节点直接包含卫星数据。在非汇集索引(NonClustered Index)中,叶子节点带有指向卫星数据的指针。指针

B树中由于叶子节点要存储数据的值,使用中序遍历,而B+树中元素的值或者指针都存在叶子节点。因此数据范围查询的时候B树使用中序遍历,B+树直接在叶子节点组成的单链表中遍历便可。blog

B+树中的中间节点的数据在子节点都能找到,可是子节点的数据不必定在中间节点可以找到。索引

B+树相对于B树的优点
1.单一节点存储更多的元素,使得查询的IO次数更少。
2.全部查询都要查找到叶子节点,查询性能稳定。
3.全部叶子节点造成有序链表,便于范围查询。get

相关文章
相关标签/搜索