zoukankan      html  css  js  c++  java
  • 数据库索引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+树

  • 相关阅读:
    各种平衡树板子
    字符串板子
    数学公式/定理/板子整理
    线性筛 板子整理
    set乱搞时需注意的坑点
    可持久化数据结构板子整理(可持久化 线段树/字典树/可并堆)
    洛谷p2483 模板k短路 可持久化可并堆
    p4929 DLX舞蹈链
    百度ai 图像增强与特效
    百度ai php请求获取access_token返回false
  • 原文地址:https://www.cnblogs.com/loren-Yang/p/7466135.html
Copyright © 2011-2022 走看看