mysql之B+Tree结构

前言

写博客是自己对知识梳理,目前是写给自己看,算是自己学习后的作业,也是为了养成一个良好的习惯。


一、B-Tree结构

1. B-TREE定义
	B-,这里的 B 表示 balance( 平衡的意思),B-树是一种多路自平衡的搜索树(B树是一颗多路平衡查找树)。
2. B-TREE结构
	它类似普通的平衡二叉树,不同的一点是B-树允许每个节点有更多的子节点,且它的键值分布在整棵树上。
3. B-TREE 特点:
	3.1 索引值和data都在每个节点上;
	3.2 整个树上节点的索引值都是唯一的;
	3.3 一次索引查找,性能逼近二分查找;
	3.4 查询的时间复杂度在 O(1)-O(logn)之间。
	
4. B-TREE具体结构如下图所示:

在这里插入图片描述

二、B+Tree结构

1. B+Tree定义
	B+树是B-树的变体,也是一种多路搜索树,并且所有叶子节点位于同一层。
2. B+Tree结构
	相对于B-Tree结构,它做了以下优化:
		2.1 为所有叶子结点增加了一个链指针,即支持范围检索;
		2.2 只有叶子节点才存储data,内节点都只存储索引值;
3. B+Tree 特点:
	3.1 内节点上只存储索引值,叶子节点上存储索引值和data;
	3.2 每个叶子节点都有一个链指针;
	3.3 所有叶子节点位于同一层;
	3.4 查询的时间复杂度是O(logn)4. B+Tree具体结构如下图所示:

在这里插入图片描述

三、B+Tree和B-Tree区别

1. 时间复杂度
	B+Tree 查询的时间复杂度是固定的,都是O(logn)B-Tree 查询的时间复杂度是在 O(1) - O(logn)之间。
2. 范围检索
	由于B+Tree的叶子节点都在同一层,且叶子节点都有链表指针,则它支持范围查询;
	B-Tree不支持范围查询。
3. 结构
	B+Tree 数据都在叶子节点上,且叶子节点上都有链表指针;
	B-Tree 数据和索引值分布在每个节点上。
4. 磁盘I/O次数
	磁盘是分block的,一次磁盘IO会读取若干个block,具体和操作系统有关,
那么由于磁盘IO数据大小是固定的,在一次IO中,单个元素越小,量就越大。
	B+Tree 它的叶子节点上才有数据,而B-Tree 它的数据遍布在所有节点上,
则B+Tree相对于B-Tree的磁盘IO次数会少一些。
	
这也是为什么mysql选择B+Tree做索引,而不选择B-Tree的原因。	
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值