广告
返回顶部
首页 > 资讯 > 数据库 >B树、B+树发展史
  • 395
分享到

B树、B+树发展史

B树B+树发展史 2015-06-17 23:06:06 395人浏览 猪猪侠
摘要

顺序查找:就是从第一个元素开始,按索引顺序遍历待查找序列,直到找出给定目标或者查找失败 缺点:效率低 -- 需要遍历整个待查序列 二分法查找:也称为折半法,是一种在有序数组中查找特定元素的搜索算法。   1:首先,从数组的中间元素

B树、B+树发展史

顺序查找:就是从第一个元素开始,按索引顺序遍历待查找序列,直到找出给定目标或者查找失败

缺点:效率低 -- 需要遍历整个待查序列

二分法查找:也称为折半法,是一种在有序数组中查找特定元素的搜索算法

  1:首先,从数组的中间元素开始搜索,如果该元素正好是目标元素,则搜索过程结束,否则执行下一步。

  2:如果目标元素大于/小于中间元素,则在数组大于/小于中间元素的那一半区域查找,然后重复步骤1的操作。

  3:如果某一步数组为空,则表示找不到目标元素

树的概念

树:连通无回路的无向图是一棵树.

根:树中的根是树的一个节点,任意节点都可以为根,根据不同问题可以选择树的一个顶点为根.

子节点&父节点:树根为0层,直接和树根相连的节点为根节点的子节点,根节点为其父节点,根节点的子节点为树的1层.对于除了根节点以外的节点u来说,直接与其相连的节点中,除了一个父节点以外的所有节点都是u的子节点,u节点的子节点的层数为u节点的层数加1.

子树:对于树中的一个节点u来说,包含其一个儿子节点以及儿子节点的所有后辈节点的树称为节点u的子树.

兄弟节点:同一父节点的子节点.

叶子节:没有子节点的节点称为叶子节点.

分支节点:除了根节点和叶子节点之外的所有节点都称为分支节点.

树高:树的总层数.

树的种类

无序树:任意子节点之间没有顺序关系,也称自由树

有序树:任意节点的子节点之间有顺序关系,如下:

二叉树:如果每个节点的儿子节点不多于两个,则称这棵树为二叉.每个父节点的子节点用左右儿子节点来加以区分,以左儿子节点为根的子树称为左子树,以右儿子节点为根的树称为右子树.

满二叉树:如果一个二叉树的任何节点或者树叶,或者恰好有两颗非空子树,则此二叉树称为满二叉树.

完全二叉树:如果一棵二叉树最多只有最下面的两次节点度数小于2,并且最下面一层的节点都集中在该层的最左边的连续位置,成称其实完全二叉树.

平衡二叉树(Balanced Binary Tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树.

储存:链式储存。

红黑树: 在平衡二叉树稳定性的基础上,再优化一下,减少旋转次数 特性: 1、每个节点要么是红色,要么是黑色。 2、根节点必须是黑色。 3、红色节点不能连续(也即是,红色节点的孩子和父亲都不能是红色)。 4、对于每个节点,从该点至null(树尾端)的任何路径,都含有相同个数的黑色节点。

二叉树特点:查找速度和比较次数最小,但是磁盘IO,当数据量过大的时候,索引大小可能有几个G,不可能全都加载到内存

引出下面的树更稳

B树与B+树

B树 、B - 树都读B树。

B树与B+树区别:

B树每个节点都存储数据,所有节点组成这棵树。B+树只有叶子节点存储数据(B+数中有两个头指针:一个指向根节点,另一个指向关键字最小的叶节点),叶子节点包含了这棵树的所有数据,所有的叶子结点使用链表相连,便于区间查找和遍历,所有非叶节点起到索引作用。

B树中叶节点包含的关键字和其他节点包含的关键字是不重复的,B+树的索引项只包含对应子树的最大关键字和指向该子树的指针,不含有该关键字对应记录的存储地址。

B树中每个节点(非根节点)关键字个数的范围为[m/2(向上取整)-1,m-1](根节点为[1,m-1]),并且具有n个关键字的节点包含(n+1)棵子树。B+树中每个节点(非根节点)关键字个数的范围为[m/2(向上取整),m](根节点为[1,m]),具有n个关键字的节点包含(n)棵子树。

B+树中查找,无论查找是否成功,每次都是一条从根节点到叶节点的路径。

B树的优点:B树的每一个节点都包含key和value,因此经常访问的元素可能离根节点更近,因此访问也更迅速。

M阶B+数特点

有n棵子树的非叶子结点中含有n个关键字(b树是n-1个),这些关键字不保存数据,只用来索引,所有数据都保存在叶子节点(b树是每个关键字都保存数据)。
所有的叶子结点中包含了全部关键字的信息,及指向含这些关键字记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接(叶子节点组成一个链表)。
所有的非叶子结点可以看成是索引部分,结点中仅含其子树中的最大(或最小)关键字。
通常在b+树上有两个头指针,一个指向根结点,一个指向关键字最小的叶子结点。
同一个数字会在不同节点中重复出现,根节点的最大元素就是b+树的最大元素。

B+树的优点

所有的叶子结点使用链表相连,便于区间查找和遍历。B树则需要进行每一层的递归遍历。相邻的元素可能在内存中不相邻,所以缓存命中性没有B+树好。

b+树的中间节点不保存数据,能容纳更多节点元素。

B树和B+树的共同优点

考虑磁盘io的影响,它相对于内存来说是很慢的。数据库索引是存储在磁盘上的,当数据量大时,就不能把整个索引全部加载到内存了,只能逐一加载每一个磁盘页(对应索引树的节点)。所以我们要减少IO次数,对于树来说,IO次数就是树的高度,而“矮胖”就是b树的特征之一,m的大小取决于磁盘页的大小。

虽然查询次数比二叉树多,尤其当单一节点元素多时,但是相比磁盘IO速度,内存中的比较耗时几乎可以忽略

所以只要树的高度是够低,IO次数是足够少,就可以提升查找性能

IO:每一次读取的数据称之为一页.

B树示意图:

 

 

以下为 B+树示意图:

 

 在Mysql中,最常用的两个存储引擎是MyISAM和InnoDB,它们对索引的实现方式是不同的

MyISAM : data存的是数据地址。索引是索引,数据是数据。索引放在XX.MYI文件中,数据放在XX.MYD文件中,所以也叫非聚集索引

 

 

InnoDB: data存的是数据本身。索引也是数据。数据和索引存在一个XX.IDB文件中,所以也叫聚集索引。

 

 我们的Mysql数据库用的InnoDB。

了解了数据结构再看索引,一切都不费解了,只是顺着逻辑推而已。另加两种存储引擎的区别:

MyISAM是非事务安全的,而InnoDB是事务安全的

MyISAM的粒度是表级的,而InnoDB支持行级锁

MyISAM支持全文类型索引,而InnoDB不支持全文索引

MyISAM相对简单,效率上要优于InnoDB,小型应用可以考虑使用MyISAM

MyISAM表保存成文件形式,跨平台使用更加方便

MyISAM管理非事务表,提供高速存储和检索以及全文搜索能力,如果在应用中执行大量select操作可选择

InnoDB用于事务处理,具有ACID事务支持等特性,如果在应用中执行大量insert和update操作,可选择。

 

参考文献:

https://www.cnblogs.com/daguozb/p/8665506.html

Https://www.cnblogs.com/Ash-ly/p/5459688.html

https://www.jianshu.com/p/f456d7c80ffb

https://blog.csdn.net/weixin_42228338/article/details/97684517

https://blog.csdn.net/zhuanzhe117/article/details/78039692

您可能感兴趣的文档:

--结束END--

本文标题: B树、B+树发展史

本文链接: https://www.lsjlt.com/news/6504.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • B树、B+树发展史
    顺序查找:就是从第一个元素开始,按索引顺序遍历待查找序列,直到找出给定目标或者查找失败 缺点:效率低 -- 需要遍历整个待查序列 二分法查找:也称为折半法,是一种在有序数组中查找特定元素的搜索算法。   1:首先,从数组的中间元素...
    99+
    2015-06-17
    B树 B+树发展史
  • B树、B+树发展史 、区别
    顺序查找:就是从第一个元素开始,按索引顺序遍历待查找序列,直到找出给定目标或者查找失败 缺点:效率低 -- 需要遍历整个待查序列 二分法查找:也称为折半法,是一种在有序数组中查找特定元素的搜索算法。   1:首先,从数组的中间元素...
    99+
    2020-10-19
    B树 B+树发展史 区别
  • B树、B-树、B+树、B*树都是什么
    今天看数据库,书中提到:由于索引是采用 B 树结构存储的,所以对应的索引项并不会被删除,经过一段时间的增删改操作后,数据库中就会出现大量的存储碎片,这和磁盘碎片、内存碎片产生原理是类似的,这些存储碎片不仅占用了存储空间,而且降低了...
    99+
    2018-09-06
    B树 B-树 B+树 B*树都是什么
  • MySQL 树形索引结构 B树 B+树 - G
    MySQL 树形索引结构 B树 B+树   如何评估适合索引的数据结构 索引的本质是一种数据结构 内存只是临时存储,容量有限且容易丢失数据。因此我们需要将数据放在硬盘上。 在硬盘上进行查询时也就产生了硬盘的I/O操作,而硬盘的I...
    99+
    2021-08-06
    MySQL 树形索引结构 B树 B+树 - G
  • 什么是多路搜索树B树和B+树
    本篇文章给大家分享的是有关什么是多路搜索树B树和B+树,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。多路搜索树完全二叉树高度:O(log2N)...
    99+
    2022-10-18
  • B树和B+树的介绍和对比,以及MySQL为何选择B+树
    在计算机科学中,B树和B+树是常用的数据结构,用于在大规模数据集上进行高效的插入、删除和查找操作。它们在数据库管理系统、文件系统等许多实际应用中发挥着重要作用。本文将深入介绍B树和B+树的结构特点、实际应用方面以及它们的优缺点,并最后进行二...
    99+
    2023-10-04
    b树 数据结构
  • B树索引
    https://www.cnblogs.com/xqzt/p/4456746.html    B-Tree索引是最常见的索引结构,默认创建的索引就是B-Tree索引。 一、B树索引的结构 B-树索引是基于二叉树结构的。B-树索引结...
    99+
    2014-08-16
    B树索引
  • B+树索引
    https://www.iteye.com/blog/zhuyuehua-1872202   1.索引结构          1.1 B+树索引结构         从物理上说,索引通常可以分为:分区和非分区索引、常规B树索引、位...
    99+
    2022-04-10
    B+树索引
  • MySQL为什么使用B+树,而不是B树?
    在MySQL中,B+树被广泛应用于索引结构,因为它支持高效的范围查询和区间扫描,并且有助于减少磁盘I/O操作,从而提高查询效率。为什么MySQL使用B+树而不是B树?主要有以下几个原因: 1、B+树可以更好地利用磁盘预读特性 在数据库中,...
    99+
    2023-09-21
    mysql 数据库
  • 树结构中MongoDb使用的到底是 B 树还是B+树
    这篇文章给大家介绍树结构中MongoDb使用的到底是 B 树还是B+树,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。关于 B 树与 B+ 树,网上有一个比较经典的问题:为什么 Mong...
    99+
    2022-10-18
  • MySQL用B+树(而不是B树)做索引的原因
      https://www.jianshu.com/p/7ce804f97967 众所周知,MySQL的索引使用了B+树的数据结构。那么为什么不用B树呢? 先看一下B树和B+树的区别。 1.B树 维基百科对B树的定义为“在计算...
    99+
    2020-03-03
    MySQL用B+树(而不是B树)做索引的原因
  • MySQL中B树索引和B+树索引的区别详解
    目录1. 多路搜索树2. B树-多路平衡搜索树3. B树索引4. B+树索引总结如果用树作为索引的数据结构,每查找一次数据就会从磁盘中读取树的一个节点,也就是一页,而二叉树的每个节点...
    99+
    2022-11-13
  • 【mysql】聚簇索引和非聚簇索引(B树和B+树)
    博主简介:想进大厂的打工人博主主页:@xyk:所属专栏: mysql 目录 一、索引分类 二、索引的数据结构 2.1 B树:改造二叉树 2.2 B+树:改造B树 三、Mysql索引实现—InnoDB引擎 3.1 主键索引(聚簇...
    99+
    2023-09-25
    mysql 数据库 b树 数据结构
  • B树与Hash查找
    2-3       解析 : 有可能会发生冲突,所以没法求平均查找长度。2-10       解析 :参考点击打开链接。2-14    ...
    99+
    2023-05-25
    结点 散列表 列地址
  • B-树如何插入
    这篇文章将为大家详细讲解有关B-树如何插入,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。插入过程和树的构建过程本质是一致的,即都是进行插入操作,并对插入后的B-树进行调整...
    99+
    2022-10-18
  • MySQL中B树索引和B+树索引的区别是什么
    本文小编为大家详细介绍“MySQL中B树索引和B+树索引的区别是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“MySQL中B树索引和B+树索引的区别是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。如果用...
    99+
    2023-06-29
  • 关于Java的二叉树、红黑树、B+树详解
    目录1、二叉查找树2、平衡二叉查找树3、红黑树:4、 B树:5、 B+树6、红黑树 VS B+树数组和链表是常用的数据结构,数组虽然查找快(有序数组可以通过二分法查找),但是插入和删...
    99+
    2023-05-20
    Java二叉树 Java红黑树 JavaB+树
  • MySQL索引:B+树索引
    MySQL索引:B+树索引 B+树索引是传统意义上的索引,这是目前关系型数据库系统中查找最为常用和最为有效的索引。B+树索引的构造类似于二叉树,根据键值快速找到数据 B树 B+树是由B树演化而来的,在了解B+树之前,我们需要对B树有一点认...
    99+
    2021-09-01
    MySQL索引:B+树索引
  • mysql为什么用b+树
    mysql为什么用b+树?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。mysql为什么用b+树1.B+树更适合用来存储外部数据,也就是所谓...
    99+
    2022-10-18
  • B+树详解,一次就懂
    ⭐注意:不会直接讲 B+树的结构,会从最简单的二叉树开始讲起来。如果认真看完,我想你对树类型的数据结构的理解又上了一个新的台阶。 ⭐如果有误,请大家指出。下文均是在B站学习的过程中,总结的笔记和心得体会 索引结构 MySQL索引是在 ...
    99+
    2023-08-21
    b树 数据结构 mysql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作