设为首页
收藏本站
切换到宽版
登录
立即注册
找回密码
搜索
搜索
本版
帖子
用户
快捷导航
论坛
BBS
VIP用户组
官网群
无名商城论坛
»
论坛
›
资源分享区
›
学习资源专区
›
【LSP】B-树、B+树初探
返回列表
发帖
查看:
224
|
回复:
0
[其他技术]
【LSP】B-树、B+树初探
[复制链接]
无名
无名
当前离线
积分
32464
1万
主题
1万
帖子
3万
积分
管理员
积分
32464
发消息
发表于 2022-5-8 17:04:12
|
显示全部楼层
|
阅读模式
一、背景
数据库索引使用树结构存储(注:MySQL使用B+树)。
Q:索引为什么不使用二叉查找数结构?
A:考虑到磁盘IO;
数据库索引是存储在磁盘上的,当数量比较大时索引大小可能几个G。不可能把整个索引全加载到内存中,能做的只有逐一加载每一个磁盘页(对应着索引树的节点);
为了减少磁盘IO的次数,把“瘦高”的树结构变得“矮胖”。这就是B-树的特征之一;
二、B-树
1.介绍
B-树是一种多路平衡查找树,以m阶(B树中一个节点的子节点数目的最大值)为例,它的每一个节点最多包含k(m/2 <= k <= m)个孩子,
其中k的大小取决于磁盘页的大小。有自平衡的能力。
2.特征
<1>根节点至少有两个子女;
<2>每个中间节点都包含k-1个元素和k个孩子,其中 m/2 <= k <= m;
<3>每个叶子节点都包含k-1个元素,其中 m/2 <= k <= m;
<4>所有叶子节点都位于同一层上;
<5>每个节点中的元素都是从小到大排列,节点当中k-1个元素正好是k个孩子包含的元素的值域分划。
三、B+树
1.介绍
B+树是基于B-树的一种变体,有着比B-树更高的查询性能。
2.特征
<1>有K个子树的中间节点包含K个元素(B-树中是k-1个元素),每个元素不保存数据只用来索引,所有数据都保存在叶子节点上;
<2>所有叶子节点中包含了全部元素的信息,及指向这些元素记录的指针,且叶子节点本身以关键字的大小自小到大顺序链接;
<3>所有的中间节点元素同时存在于子节点,在子节点元素中是最大or最小的元素;
注:
<1>"——>":指针
<2>最大元素在根节点
<3>卫星数据(Data):指的是索引元素所指向的数据记录,比如数据库中的某一行在B-树中无论中间节点还是叶子节点都带有卫星数据,而在
B+树中只有叶子节点有,中间节点仅仅是索引没有任何数据关联。
<4>与B-树的不同:
1>B+树中间节点没有卫星数据,所以同样大小的磁盘页可以容纳更多的节点元素;
2>B+树的查询必须找到叶子节点,而B-树只要找到匹配元素,因此B+树更稳定;
3>范围查找时,B-树要反复遍历,而B+树只在链表上做遍历即可。
PS:关于数据库索引
一个表中有多个索引就有多个B+树,只有主键索引存储整张表数据;
索引数据结构:二叉树、红黑树、Hash表、B-树;
索引分为:单值索引、联合索引(多列标识唯一的一行数据,把多个字段联合起来作为索引)
PS2:简单概述B-树、B+树
B-树:叶子节点具有相同的深度,叶子节点的指针为空,所有索引元素不重复,节点中元素索引从左到右递增排列;
B+树:非叶子节点不存储data(卫星数据),只存储索引(冗余)可以放更多索引,叶子节点包含所有索引字段,叶子节点用指针连接提高区间访问的性能。
节点
,
索引
,
元素
,
叶子
,
数据
相关帖子
•
【ddos篇】hping3进行ddos攻击
•
【GD】iApp SYSO 打印
•
【iAPP源码】皮肤小偷开源项目
•
Java从入门到放弃
•
【夜未央】Oracle day09 教程
•
【夜未央】Oracle day05 教程
•
【FUT】社会工程学比较简单的攻击方法
•
【LUR】帅气炫迈在线教你如何搭建蔡徐坤打篮球网站
•
去除重复数据,去除重复软件,去除重复邮箱或者是手机数据软件
回复
使用道具
举报
返回列表
发帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
快速回复
返回顶部
返回列表