BTree和B+Tree详解

一直理不清楚,今日详细学习一下!

B+索引是B+树在数据库中的一种实现,最为常见的。B+树种的B代表平衡,而不是二叉。

1、二叉查找树

二叉树的左子树的键值小于根的键值,右子树的键值大于根的键值。

 二叉查找树可以任意构造,但是可能有些构造情况可能导致查找效率低。如果想让二叉树查询效率尽可能的高,需要二叉树是平衡的,所以有AVL平衡二叉树。

2、平衡二叉树AVL Tree

符合二叉树的条件,还满足任何节点两个子树的高度最大差为1.

 AVL树进行插入或删除节点,可能导致AVL树失去平衡,会出现:左左,左右,右左、右右的情况,会导致失去平衡,就需要进行旋转。

3 、平衡多叉树B-Tree

B-Tree是为磁盘等待外存设备设计的一种平衡查找树。每个节点包含key和data.

系统从磁盘读取数据到内存时以磁盘块block为基本耽误的,位于同一个磁盘块中的数据会被一次性读取出来,不是需要什么取取什么。InnoDB存储引擎中有页Page,页也是磁盘管理的最小耽误。InnoDB存储引擎中默认每个页大小为16KB,通过innodb_page_size将页大小设置为4k\8k\16k.

InnoDB在把磁盘数据读入搭配磁盘时会以页为基本单位,查询时如果每一页中每条数据都能有助于定位数据记录的位置,将会减少IO次数,提高查询效率。

B-Tree是键值对进行记录,key各不相同。m阶的B-Tree特性为:

1)每个节点最多有m个孩子。

2)除了根节点和叶子节点外,其他每个节点至少有Ceil(m/2)个孩子;

3)若根节点不是叶子节点,则至少有2个孩子;

4)所有叶子节点都在同一层,且不包含其他关键字的信息。

5)每个非中断节点包含n个关键字信息;

6)ki为关键字,且关键字升序排列

4、B+Tree树

在B-Tree基础上进行优化,使其更适合实现外存储索引结构。InnoDB就是存储引擎就是用B+Tree。

在B-Tree中每一个页存储空间有限,如果data数据较大,会导致每个节点key太小,当数据量很大同一会导致B_Tree深度较大,增大查询的磁盘IO次数,影响查询效率。

在B+Tree中,所有数据记录节点都是按照键值大小顺序存放在同一层叶子节点上,而非叶子节点上只存储key值信息,可以大大增大每个节点存储的key值的数量,降低B+Tree的高度。

特点:

1)非叶子节点只存储键值信息;

2)所有叶子节点之间都有一个链指针;

3)数据记录都存放在叶子节点中;

B+Tree有两个头指针,一个指向根节点,一个指向关键字最小的叶子节点,而且所有叶子节点即数据节点之间是一个链式环。

B+Tree树,对B+Tree的查找运算:对于主键的范围查找和分页查找;从根节点开始,进行随机查找。

数据库中B+Tree索引可以为聚集索引和辅助索引。

上图为聚集索引,聚集索引的B+Tree的叶子节点存放的整张表的行记录数据。辅助索引和聚集索引的去吧在于辅助索引的叶子节点并不包含行记录的全部数据,二十存储相应行数据的聚集索引剪,即主键。当通过辅助索引来查询数据时,InnoDB存储引擎会遍历辅助索引找到主键,然后再通过主键在聚集索引中找到完整的行记录数据。当通过辅助索引来查询数据时,InnoDB存储引擎会遍历辅助索引找到主键,然后再通过主键在聚集索引中找到完整的行记录数据。

5 、红黑树

红黑树是平衡二叉树,但部署完美平衡的二叉树,保持完美平衡的成本太高。

红黑树的性质:

1)节点是红色或者黑色;

2)根节点是黑色;

3)叶子节点是黑色;

4)每个红色节点的两个子节点都是黑色,不能有连续的红色节点;

转载:https://blog.csdn.net/Hubery_James/article/details/80565137

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值