数据结构与算法之美——B-树和B+树

本文详细介绍了B-树和B+树的原理,包括它们在数据库索引中的应用。相较于二叉查找树,B-树和B+树因其能减少磁盘IO次数,从而提高查询性能,被广泛用于大数据量的索引存储。B+树的特性使其在范围查询中表现更优,所有数据仅在叶子节点存储,且叶子节点间通过指针连接。
摘要由CSDN通过智能技术生成

一、前言

       mysql索引基于什么结构? hash表或者B+树。B+树的实现细节是什么?B-树和B+树有什么区别?联合索引在B+树中如何存储?B-树和B+树都是很基础的概念。要明白什么是B+树,要先了解什么是B-树。需要注意的是B-树就是B树,中间的横线并不是减号。

       数据库索引为什么要使用树存储?①树的查询效率高,②维持相对顺序。那为什么没有使用二叉查找树来实现呢?二叉查找树查询的时间复杂度是O(logN),性能已经很高了,莫非B树比它更快?其实从算法逻辑上将,二叉查找树的查询次数和比较次数都是最小的。但是我们要考虑磁盘IO。

       数据库索引是存储在磁盘上的,当数据量比较大时索引的大小可能有几个G甚至更多。当我们利用索引查询的时候,显然不能把整个索引全部加载到内存中。能做的只有逐一加载每一个磁盘块,这里的磁盘块对应 索引树的节点。

       一颗100万的节点的平衡二叉查找树,树高是20。一次查询可能访问20个数据块,在机械硬盘时代,从磁盘随机读一个数据块需要10ms左右的寻址时间。也就是说对于1个100万行的表,如果使用二叉树来存储,单独访问一行可能需要20个10ms的时间。

       为了提升读磁盘的效率,就必须访问尽量少的数据块。那么就不能使用二叉树这种“瘦高”的树。而应该使用“矮胖”的N叉树。这就是B-树的特征之一。

二、B树

       B树是一种多路平衡查找树,它的每一个节点最多包含k个孩子,k被称为B树的阶,k的大小取决于磁盘块的大小。下面来具体介绍一下B-树(Balance Tree),一个m阶的B树具有如下几个特征:

        1.根结点至少有两个子女。
        2.每个中间节点都包含k-1个元素和k个孩子,其中 m/2 <= k <= m
        3.每一个叶子节点都包含k-1个元素,其中 m/2 <= k <= m
        4.所有的叶子结点都位于同一层。
        5.每个节点中的元素从小到大排列,节点当中k-1个元素正好是k个孩子包含的元素的值域分划。

       下面以一个3阶B-树为例,来看一下B-树的具体结构。树中的具体元素和刚才的二叉查找树是一样的。

                                           

       来看(2,6)节点,该节点有2个元素2和6,又有3个孩子1,(3,5),8。其中1小于元素2,(3,5)在元素(2,6)之间,8大于(3,5)。正好符合刚才所列的几条特征。

                                       

三、B树查询

       演示一下B树的查询过程。假如我们要查询的数值是5。

                                                                                 第一次磁盘IO

                                 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值