美文网首页
B树B+树以及索引

B树B+树以及索引

作者: 民工小高 | 来源:发表于2019-03-27 17:08 被阅读0次

    先看B树的特征:

    假设一棵m阶的B树(一棵B树一个节点最后有m个子树,则m为B树的阶)

    1.根节点特征分两种情况:

          - 第一种:一棵树就只有一个根节点。
          - 第二种:根节点的孩子个数为2~m个
    

    2.非根非叶的中间任一结点的特征:

        - 孩子个数:[m/2]~m个
        - 关键字个数n:[m/2]-1 <= n <=m-1
        - 非叶节点中的信息包括[n,A0,K1,A1,K2,A2,…,Kn,An],其中n表示该节点中保存的关键字个数,K为关键字且Ki<Ki+1,Ai为指向子树根节点的指针。并且A(i-1)所指的子树中所有节点的均小于Ki
    

    3.叶子结点特征:

        -叶子节在相同的层,并且这些节点不带信息,实际上这些节点就表示找不到指定的值,也就是指向这些节点的指针为空。
    

    4.B树的高度的计算

    先讨论深度为L+1的m阶B树的高度
    根据B树的定义,根节点至少有一个节点,第二层至少2个结点,第三层至少为2([m/2])个结点,第L+1层 至少有2((m/2)^L-1)个结点,而L+1为叶子节点,若m阶B-树有N个关键字,则叶子节点个数为N+1
    则有N+1 ≥2*((m/2)^L-1),则L ≤ log┌m/2┐((N+1)/2 )+1
    《参考自 数据结构C语言版》

    B+树的特征

    1.有n棵子树的节点含有n个关键字
    2.所有的叶子节点包含了全部的关键字,及指向含这些关键字记录的指针,且叶子节点本身 根据关键字自小而大顺序连接(而B 树的叶子节点并没有包括全部需要查找的信息)
    3.非叶子节点可以看成索引部分,节点中仅含有其子树(根节点)中的最大(或最小)关键字(而B 树的非终节点也包含需要查找的有效信息)

    为什么说B+树比B树更适合用作数据库的索引

    1) B+tree的磁盘读写代价更低

    B+树的内部结点并没有指向关键字具体信息的指针。因此其内部结点相对B 树更小。如果把所有同一内部结点的关键字存放在同一盘块中,那么盘块所能容纳的关键字数量也越多。一次性读入内存中的需要查找的关键字也就越多。相对来说IO读写次数也就降低了。

    2) B+-tree的查询效率更加稳定

    由于非终结点并不是最终指向文件内容的结点,而只是叶子结点中关键字的索引。所以任何关键字的查找必须走一条从根结点到叶子结点的路。所有关键字查询的路径长度相同,导致每一个数据的查询效率相当。

    3)范围查询更简便

    索引

    扇区:磁盘的最小存储单位;
    磁盘块:文件系统读写数据的最小单位;
    页:内存的最小存储单位;

    数据库系统的设计者巧妙利用了磁盘预读原理,将一个节点的大小设为等于一个页,这样每个节点只需要一次I/O就可以完全载入。为了达到这个目的,在实际实现B-Tree还需要使用如下技巧:每次新建节点时,直接申请一个页的空间,这样就保证一个节点物理上也存储在一个页里,加之计算机存储分配都是按页对齐的,就实现了一个node只需一次I/O

    相关文章

      网友评论

          本文标题:B树B+树以及索引

          本文链接:https://www.haomeiwen.com/subject/pqttbqtx.html