3

B树

特点:B树中所有结点的孩子结点最大值称为B树的阶,通常用m表示。

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

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

举个例子: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+树中只有叶子节点带卫星数据,其余中间节点仅仅是索引,没有任何的数据关联。

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

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

B+树中的中间节点的数据在子节点都能找到,但是子节点的数据不一定在中间节点能够找到。

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


pengj
270 声望6 粉丝

« 上一篇
cron基本使用

引用和评论

0 条评论