• 从数据结构分析mysql为何使用B+tree


    理解mysql为何选择升级版的二叉树,就需要对各种常用的二叉树进行对比。B+Tree是一种特殊的二叉树,本质上也算二叉树。自然会满足二叉树的一般特性。

    比如,比节点数据大的在右边,节点数据小的在左边。

    二叉树(Binary Tree):每个结点最多有两个子树的树结构。一棵深度为k,且有2^k-1个结点的二叉树,称为满二叉树。

    AVL树(平衡二叉树):它是一种排序的二叉树。主要特征:左右子树的树高差绝对值不能超过1.

    R-B Tree(Red/Black Tree)红黑树,本质上也是一种二叉树。  特性:

    1)每个结点要么是红的,要么是黑的。  
    2)根结点是黑的。  
    3)每个叶结点(叶结点即指树尾端NIL指针或NULL结点)是黑的。  
    4)如果一个结点是红的,那么它的俩个儿子都是黑的。  
    5)对于任一结点而言,其到叶结点树尾端NIL指针的每一条路径都包含相同数目的黑结点。

    * 新添加节点,均为红色。

     

     B-Tree(B树):是一种自平衡的树,能够保持数据有序。与二叉树的区别,可以有多个子节点,每个节点可以存储多个值。

    m 阶(根结点中关键字的个数为1~m-1)的B树具有特性:

    1)每个节点最多有 m 个子节点

    2)除根节点和叶子节点,其它每个节点至少有 [m/2] (向上取整的意思)个子节点

    3)若根节点不是叶子节点,则其至少有2个子节点

    4)所有NULL节点到根节点的高度都一样

    5)除根节点外,其它节点都包含 n 个key,其中 [m/2] -1 <= n <= m-1

    比如每个节点最大深度=3。(3阶B树)

     B+Tree(B+树):是B-Tree的一种变种树。自然也会满足B树相关特性。主要区别:B+树的叶子会包含所有的节点数据,并产生链表结构。

     mysql数据InnoDb,采用B+Tree作为索引结构。

    B树索引示例图

     B+树索引示例图

    B树:

    每个节点由三部分组成:key,指针,数据data;

    key和指针互相间隔,节点两端是指针。

    每个叶子节点最少包含一个key和两个指针,最多包含2d-1个key和2d个指针,叶节点的指针均为null(d 大于1的正整数,表示B树的度)

    B+树:

    每个非叶子节点由二部分组成:key,指针。

    叶子节点没有指针,只有key、数据data。

    指针可能数量不一致,但是每个节点的域和上限是一致的

    单索引key查询,B树比B+树能更快查询出来数据。 但是范围查询B+树优势更加明显, 因为B+树叶子已经链表排序存储,非常好定位区间搜索。

  • 相关阅读:
    JS控制文本框输入的内容
    JavaScript属性
    无缝滚动
    CCS实例,网页栏目
    CSS特效
    HTML技巧
    如何解决问题
    判断输入的字符是不是数字
    删除txt文件内容
    能组成几个单词
  • 原文地址:https://www.cnblogs.com/song27/p/11985430.html
Copyright © 2020-2023  润新知