• 数据库索引B-树和B+树


    一开始学习数据结构的时候,主要学习的是数组,队列,链表,队列,栈,树这些数据结构,其中树主要学习二叉树,平衡二叉树,二叉搜索树等这些子节点最多只有两个的树结构。但是,当我们接触数据库的时候,你会发现数据库的索引基本都是B+树,尤其以数据库MySql为甚。那么学习的时候我们碰到B树,B+树,那么他们结构是什么样的,有什么区别,能用在什么地方呢?
    

    什么是B树,B+树

    B也就是Balance的意思。B树是一种多路搜索树,它的任意非叶子结点最多只有M个儿子,且M>2,它的每个节点不仅存储关键字,还存储数值。B+树也是一种多路搜索树,它的任意非叶子结点最多只有M个儿子,且M>2,它的每个节点只存储关键字,所有的数值放在非叶子节点上,并且所有的非叶子节点以链表的形式链接起来。(注意:B树和B-树是一回事,B-树是英语写法,连接符,二叉排序树是叫Binary Search Tree(BST),)
    二叉搜索树有大量的技术人员在网上写出了具体的结构,实现形式,在此我就不多说了,你们可以参看。
    下面我主要讲讲B-树和B+树,在讲之前,我们先来看看m-way查找树。
    

    m-way查找树:

    m-way查找树是是一种树形的存储结构,主要特点如下:

    • 每个节点存储的key数量小于m个
    • 每个节点的度小于等于m(树的度:非叶子节点含有的最大子节点数)
    • 节点中的key按顺序大小排序
    • 子树key值要完全小于、大于或介于父节点之间

    举例:
    3-way如下图所示,m为3,那么每个节点最多拥有为2个key(m-1)。
    其中,待索引元素列表为:[5, 7, 12, 6, 8, 3, 4]
    这里写图片描述

    B-Tree查找树

    B-Tree是一种平衡的m-way查找树,它可以利用多个分支节点(子树节点)来减少查询数据时所经历的节点数,从而达到节省存取时间的目的。
    B查找树主要特点如下:
    (其中ceil(x)是一个取上限的函数)

    • 每个节点的key数量小于m个
    • 每个节点的度小于等于m
    • 除根节点和叶子节点的其他节点存储key的个数必须大于等于ceil(m/2)
    • 若根结点不是叶子结点,则至少有2个孩子(特殊情况:没有孩子的根结点,即根结点为叶子结点,整棵树只有一个根节点)
    • 每个叶子节点最少包含一个key和两个指针,最多包含m-1个key和m个指针,叶节点的指针均为null 。
    • 所有叶子节点都处于同一层,也就是说所有叶节点具有相同的深度h(树的高度,也意味着树是平衡的)

    B-Tree示意图如下:
    这里写图片描述
    由于B-Tree的特性,在B-Tree中按key检索数据的算法非常直观:首先从根节点进行二分查找,如果找到则返回对应节点的data,否则对相应区间的指针指向的节点递归进行查找,直到找到节点或找到null指针,前者查找成功,后者查找失败。

    B+树

  • 相关阅读:
    NOIP模拟题 管道
    NOIP模拟题 序列
    NOIP模拟题 栅栏
    NOIP模拟题 斐波那契数列
    CodeForces 797F Mice and Holes
    CodeForces 589H Tourist Guide
    CERC2016 爵士之旅 Jazz Journey
    BZOJ3832 Rally
    BZOJ1061 NOI2008 志愿者招募
    js数组的操作
  • 原文地址:https://www.cnblogs.com/loren-Yang/p/7466135.html
Copyright © 2020-2023  润新知