使用vs建立r树索引_数据库索引:B+树 VS. 二叉树

a0ce9b059e5b25498f9f87e5ea825706.png

数据库概述及系列文章索引


1. B+树

B 树相当于是一棵多叉查找树,对于一棵 m 阶的 B 树具有如下特性:

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

e.g.1

3074747f6808d44048e22dfc4a0fdeaf.png

显然,k-1个元素产生k个孩子。

k受限于阶数,故

在第3点分析。

2. 数据库索引:B+树 VS. 二叉树

给出e.g.1对应的二叉树:

49820d13b4c2988ba889772c5a72381d.png

假设对R.C建索引(index),R.C有S(R,C)种。

首先,两种树的index都有S(R,C)个(同种C多个,用间接桶),还是比较多的,故树都放外存。查询时,从外存加进内存。

B+树的比较次数大于二叉树(量级一致

),因为二叉树一个结点只有一个元素,not equal时直接左/右转,B+树如果落在一节点两个元素中间,会多比较右边界元素。

B+树磁盘IO次数小于二叉树,一个节点经常指向不同页,范围查询时,二叉树hit节点往往B+树多很多,相应IO次数也多很多。可以看出,IO次数往往跟树高成正比

因为比较是在内存中,数据库(DB)主要看磁盘IO次数,故DB index用B+树,而非二叉树。

3. B+树作数据库的索引

DB index中的B+树往往通过调整节点大小,保证在三层,使B+树尽可能“矮胖”,index后的IO次数尽可能小。

每个节点还要保证填充度。填充度小时,往往会导致多读节点,DB index B+树节点填充度要在50%以上,这也与第1点要求

是一致的。

Reference

[1] 高频面试题:什么是B树?为啥文件索引要用B树而不用二叉查找树?,苦逼的码农,2019/11

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值