• InnoDB引擎


    InnoDB的底层是B+树,严格意义上来说是B树的一种(子类),所以B树有的特点B+树都有

    一,b树

    b树(balance tree)和b+树应用在数据库索引,可以认为是m叉的多路平衡查找树,但是从理论上讲,二叉树查找速度和比较次数都是最小的,为什么不用二叉树呢? 
    因为我们要考虑磁盘IO的影响,它相对于内存来说是很慢的。数据库索引是存储在磁盘上的,当数据量大时,就不能把整个索引全部加载到内存了,只能逐一加载每一个磁盘页(对应索引树的节点)。所以我们要减少IO次数,对于树来说,IO次数就是树的高度,而“矮胖”就是b树的特征之一,它的每个节点最多包含m个孩子,m称为b树的阶,m的大小取决于磁盘页的大小。

    █一个M阶的b树具有如下几个特征:

    1. 定义任意非叶子结点最多只有M个儿子,且M>2;
    2. 根结点的儿子数为[2, M];
    3. 除根结点以外的非叶子结点的儿子数为[M/2, M],向上取整;
    4. 非叶子结点的关键字个数=儿子数-1;
    5. 所有叶子结点位于同一层;
    6. k个关键字把节点拆成k+1段,分别指向k+1个儿子,同时满足查找树的大小关系。

    █有关b树的一些特性,注意与后面的b+树区分:

    1. 关键字集合分布在整颗树中;
    2. 任何一个关键字出现且只出现在一个结点中;
    3. 搜索有可能在非叶子结点结束;
    4. 其搜索性能等价于在关键字全集内做一次二分查找;

    二,b+树

    b+树,是b树的一种变体,查询性能更好。m阶的b+树的特征:

    1. 有n棵子树的非叶子结点中含有n个关键字(b树是n-1个),这些关键字不保存数据,只用来索引,所有数据都保存在叶子节点(b树是每个关键字都保存数据)。
    2. 所有的叶子结点中包含了全部关键字的信息,及指向含这些关键字记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。
    3. 所有的非叶子结点可以看成是索引部分,结点中仅含其子树中的最大(或最小)关键字。
    4. 通常在b+树上有两个头指针,一个指向根结点,一个指向关键字最小的叶子结点。
    5. 同一个数字会在不同节点中重复出现,根节点的最大元素就是b+树的最大元素。

    █b+树相比于b树的查询优势:

    1. b+树的中间节点不保存数据,所以磁盘页能容纳更多节点元素,更“矮胖”;
    2. b+树查询必须查找到叶子节点,b树只要匹配到即可不用管元素位置,因此b+树查找更稳定(并不慢);
    3. 对于范围查找来说,b+树只需遍历叶子节点链表即可,b树却需要重复地中序遍历

    B+树结构的  页

     

  • 相关阅读:
    熔断器Hystrix
    面向对象
    基础语法
    为什么需要定义数据类型???
    集成Ribbon的客户端调用工具——Feign
    Ribbon实现客户端负载均衡
    入门神经网络-Python 实现(下)
    代码视角-神经网络-Python 实现(上)
    归纳方法
    神经网络-反向传播BP算法推导
  • 原文地址:https://www.cnblogs.com/2940500426yingxin/p/16016363.html
Copyright © 2020-2023  润新知