zoukankan      html  css  js  c++  java
  • B+树

    一、引言 

       B+树是B树的一个变种,用于查询时有更高的性能,常用作于mySql等关系型数据库的索引进行使用,必须了解一波~

    二、B+树

      定义:B+树可以简单地看作n叉排序树

      常见应用:关系型数据库索引,如mySql索引,和操作系统的文件系统中

      优势:

    • 由于卫星数据存在于叶子节点,所以中间节点可以存储更多的元素,使得查询的IO次数更少
    • 所有查询都要查找到叶子节点,查询性能稳定
    • 所有叶子节点形成有序链表,便于范围查询

      下面通过一个查找元素的例子来进行解析~

      查找元素的流程:

       上图是B+树查找元素的流程示例,也许第一次看会比较蛋疼,那我们先从它的几个特点说起:

      m阶的B+树独有特征:

    • 有k个子树的中间节点包含有k个元素(B树中是k-1个元素),每个元素不保存数据只用来索引所有数据都保存在叶子节点
    • 所有的叶子结点中包含了全部元素的信息及指向含这些元素记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。
    • 所有的中间节点元素都同时存在于子节点,在子节点元素中是最大(或最小)元素。

      解析:我们可以对着上面的原则进行解析,图中是一个3阶的B+树,那么m3,m/2 <= k <= m则k可以取23

    • 如根节点,有k【2】个子树包含了k【2】个元素;又如中间节点有k【3】个子树包含了k【3】个元素
    • 所有叶子节点包含了整棵树的所有元素信息,且依次从大到小排列,用指针相连
    • 所有的中间节点元素都同时存在于子节点,且为其中的最大(或最小)元素,这在图中也能看出。

      PS:根节点的最大元素【图中是15】等同于B+树的最大元素,以后无论插入/删除多少元素,始终要保证最大元素在根节点当中

      PS:卫星数据:指的是索引元素所指向的数据记录

      PS:B+数作为索引使用时,中间节点不保存数据只做索引用,所有数据的定位指针【卫星数据】保存在叶子节点中。

      PS:在数据库的聚集索引(Clustered Index)中,叶子节点直接包含卫星数据。在非聚集索引(NonClustered Index)中,叶子节点带有指向卫星数据的指针

  • 相关阅读:
    leetcode-832-Flipping an Image
    leetcode-830-Positions of Large Groups
    leetcode-824-Goat Latin(字符串的处理)
    leetcode-821-Shortest Distance to a Character
    leetcode-819-Most Common Word(词频统计)
    HDU 4729 An Easy Problem for Elfness(树链剖分边权+二分)
    python爬虫(1)——正则表达式
    利用MySQL之federated引擎实现DBLink功能
    HTTPS原理及流程
    NIO、多路复用的终极奥义
  • 原文地址:https://www.cnblogs.com/riches/p/13020814.html
Copyright © 2011-2022 走看看