mysql之B+Tree结构

文章目录

  • 前言
  • 一、B-Tree结构
  • 二、B+Tree结构
  • 三、B+Tree和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具体结构如下图所示:

mysql之B+Tree结构_第1张图片

二、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具体结构如下图所示:

mysql之B+Tree结构_第2张图片

三、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的原因。	

你可能感兴趣的:(mysql,mysql,b树,数据结构)