广告
返回顶部
首页 > 资讯 > 精选 >B+树在数据库索引中的作用是什么
  • 239
分享到

B+树在数据库索引中的作用是什么

2023-06-19 11:06:46 239人浏览 独家记忆
摘要

本篇文章给大家分享的是有关B+树在数据库索引中的作用是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、B-树和B+树回顾1.B-树B-tree(多路搜索树)是一种常见的数

本篇文章给大家分享的是有关B+树在数据库索引中的作用是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

一、B-树和B+树回顾

1.B-树

B-tree(多路搜索树)是一种常见的数据结构。使用B-tree结构可以显著减少定位记录时所经历的中间过程,从而加快存取速度。按照翻译,B 通常认为是Balance的简称。这个数据结构一般用于数据库的索引,综合效率较高。

B-树每个节点都存储key和data,所有节点组成这棵树,并且叶子节点指针为null。

B+树在数据库索引中的作用是什么  

B-树的特征:

  1. 根节点至少有两个孩子

  2. 每个非根节点有[ ,M]个孩;

  3. 每个非根节点有[ -1,M-1]个关键字,并且以升序排列

  4. key[i]和key[i+1]之间的孩子节点的值介于key[i]、key[i+1]之间

  5. 所有的叶子节点都在同一层

B-树的优势:

B树的优势在于多路查找,这便是优于红黑树的具体原因,大家想一想,B-树每个结点有多个key,而红黑树每个结点有一个key,那么随着数据的不断增多,红黑树的高度不断增加,效率不断降低,而B树的高度一般都很低,为甚?因为B树一个结点可以放N个key,,只有都满了才分裂一次!B树为什么会分裂呢? 因为随着数据的增多,一个结点的key满了,为了保持B树的特性,就会产生分裂,就像红黑树和AVL树为了保持树的性质需要进行旋转是一样一样的!

 

2.B+树

B+树是B-树的变体,也是一种多路搜索树,其定义基本与B树相同。B+树上的叶子结点存储关键字以及相应记录的地址,叶子结点以上各层作为索引使用。

B+树在数据库索引中的作用是什么  

B+树:只有叶子节点存储data,叶子节点包含了这棵树的所有键值,叶子节点不存储指针。

B+树的特征:

  1. 所有关键字都出现在叶子结点的链表中(稠密索引),且链表中的关键字恰好是有序的;

  2. 不可能在非叶子结点命中;

  3. 非叶子结点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储(关键字)数据的数据层;

  4. 更适合文件索引系统;

B+Tree与B-树的不同:

  1. 每个节点的指针上限为2d而不是2d+1;

  2. 内节点不存储data,只存储key,即所有关键字都在叶子结点出现;

  3. 叶子节点不存储指针,而是为所有叶子结点增加一个链指针。

B+树的优势:

在B+树上增加了顺序访问指针,也就是每个叶子节点增加一个指向相邻叶子节点的指针,这样一棵树成了数据库系统实现索引的首选数据结构。 原因有很多,最主要的是这棵树矮胖,一般来说,索引很大,往往以索引文件的形式存储的磁盘上,索引查找时产生磁盘I/O消耗,相对于内存存取,I/O存取的消耗要高几个数量级,所以评价一个数据结构作为索引的优劣最重要的指标就是在查找过程中磁盘I/O操作次数的时间复杂度。树高度越小,I/O次数越少。 那为什么是B+树而不是B树呢,因为它内节点不存储data,这样一个节点就可以存储更多的key。

 

二、索引搜索速度的决定性因素是什么?

因为数据库的大部分数据都是存在磁盘上面的,一般来说,索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储的磁盘上。这样的话,索引查找过程中就要产生磁盘I/O消耗,相对于内存存取,I/O存取的消耗要高几个数量级,所以评价一个数据结构作为索引的优劣最重要的指标就是在查找过程中磁盘I/O操作次数的时间复杂度。树高度越小,I/O次数越少。换句话说,索引的结构组织要尽量减少查找过程中磁盘I/O的存取次数。

二叉树的高度过深进行多次磁盘io,导致查询效率低下,而B树和B+树树中每个结点最多含有m个孩子,所以相对二叉树,B-树和B+树的高度比较低,显得又矮又胖!

 

三、MySQL中的存储引擎

Mysql中,最常用的两个存储引擎是MyISAM和InnoDB,它们是mysql的两代搜索引擎。

它们对索引的实现方式不同,MyISAM data存的是数据地址,索引和数据分开的。InnoDB data存的是数据本身,索引也是数据。

索引分为主索引和辅助索引:一般以主键为索引的叫做主索引,而以其他键为索引的叫做辅助索引。

 

四、MyISAM利用B+树实现

主索引:

B+树在数据库索引中的作用是什么  

由上图可以看出,col1是主键,而叶子结点存储的数据是一个地址,通过地址找到数据。

辅助索引(和主索引不同的是辅助索引的key是可以重复的) :

B+树在数据库索引中的作用是什么  
 

五、InnoDB利用B+树实现

主索引:

B+树在数据库索引中的作用是什么  

注意,和MyISAM不同的是叶子结点的数据域保存的是全部数据。

辅助索引:

 

仔细看辅助索引和主索引的区别,辅助索引的叶子结点保存的是主键;这就是MyISAM和InnoDB最大的不同。

 

六、InnoDB到底比MyISAM好在哪里?

既然MyISAM和InnoDB是Mysql的两代引擎,肯定会有一个提升,而InnoDB是最新一代,那么它到底优在哪里?

试想,MyISAM和InnoDB都是以B+树为基础实现的,相对于B树的不同其实前面已经讲过,即数据域和结点分离;

而MyISAM更是索引和文件分离,B+树的叶子结点的数据域存放的是文件内容的地址,主索引和辅助索引的B+树都是如此,那么如果我改变了一个地址,是不是所有的索引树都得改变,正如前面我们讲的在磁盘上频繁的读写操作是效率很低的,而这块又不适用局部原理,因为逻辑上相邻的结点,物理上不一定相邻,那么这样就会造成效率上的降低;

于是乎,InnoDB就产生了,它让除了主索引以外的辅助索引的叶子结点的数据域都保存主键,先通过辅助索引找到主键,然后通过主键找到叶子结点的所有数据,听起来貌似很麻烦,遍历了两棵树,但是,这样如果有了修改的话,改变的只是主索引,其它辅助缩印都不用动,而且,数据库中的树的每一个结点的key可不是咱们给的那么少,试想如果一个结点有1024个key,那么高度为2的B+树都有1024*1024个key,所以一般树的高度都很低,所以,遍历树的消耗几乎忽略不计!

 

七、总结

 

1.为什么使用B+树?

  • 文件很大,不可能全部存储在内存中,故要存储到磁盘上

  • 索引的结构组织要尽量减少查找过程中磁盘I/O的存取次数(为什么使用B-/+Tree,还跟磁盘存取原理有关,具体看下边分析)

  • 局部性原理与磁盘预读,预读的长度一般为页(page)的整倍数,(在许多操作系统中,页得大小通常为4k)

  • 数据库系统巧妙利用了磁盘预读原理,将一个节点的大小设为等于一个页,这样 每个节点只需要一次I/O 就可以完全载入,(由于节点中有两个数组,所以地址连续)。而红黑树这种结构, h 明显要深的多。由于逻辑上很近的节点(父子)物理上可能很远,无法利用局部性。

 

2.为什么B+树比B树更适合做索引?

B+树磁盘读写代价更低

B+的内部结点并没有指向关键字具体信息的指针,即内部节点不存储数据。因此其内部结点相对B 树更小。如果把所有同一内部结点的关键字存放在同一盘块中,那么盘块所能容纳的关键字数量也越多。一次性读入内存中的需要查找的关键字也就越多。相对来说IO读写次数也就降低了。

B+-树的查询效率更加稳定

由于非终结点并不是最终指向文件内容的结点,而只是叶子结点中关键字的索引。所以任何关键字的查找必须走一条从根结点到叶子结点的路。所有关键字查询的路径长度相同,导致每一个数据的查询效率相当。

 

3.MySQL两种索引MyISAM和InnoDB的区别

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

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

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

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

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

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

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

以上就是B+树在数据库索引中的作用是什么,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网精选频道。

--结束END--

本文标题: B+树在数据库索引中的作用是什么

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

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

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

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

下载Word文档
猜你喜欢
  • B+树在数据库索引中的作用是什么
    本篇文章给大家分享的是有关B+树在数据库索引中的作用是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、B-树和B+树回顾1.B-树B-tree(多路搜索树)是一种常见的数...
    99+
    2023-06-19
  • 为什么数据库索引多用B+树
    今天就跟大家聊聊有关为什么数据库索引多用B+树,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。今天我们来讲一讲数据库的索引是什么索引,就跟我们的书本的...
    99+
    2022-10-19
  • MySQL中B树索引和B+树索引的区别是什么
    本文小编为大家详细介绍“MySQL中B树索引和B+树索引的区别是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“MySQL中B树索引和B+树索引的区别是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。如果用...
    99+
    2023-06-29
  • MySQL中B+树索引的作用是什么
    本篇文章给大家分享的是有关MySQL中B+树索引的作用是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。树的简介树的简介树跟数组、链表、堆栈...
    99+
    2022-10-18
  • MySQL数据库索引选择使用B+树的原因是什么
    这篇文章主要介绍MySQL数据库索引选择使用B+树的原因是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、二叉查找树(1)二叉树简介:二叉查找树也称为有序二叉查找树,满足二叉查...
    99+
    2022-10-18
  • mysql索引数据结构要用B+树的原因是什么
    这篇文章主要讲解了“mysql索引数据结构要用B+树的原因是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql索引数据结构要用B+树的原因是什么”吧!1. Hash表?No因考虑到...
    99+
    2023-06-30
  • Mongodb中使用B树索引的原因是什么
    这篇文章给大家介绍Mongodb中使用B树索引的原因是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。  B树和B+树  开头,我们先回忆一下,B树和B+树的结构以及特点。  树内的...
    99+
    2022-10-18
  • MongoDB 中索引选择B-树的原因是什么
    这期内容当中小编将会给大家带来有关MongoDB 中索引选择B-树的原因是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、B-树和B+树的区别很明显,我们要想弄清楚...
    99+
    2022-10-18
  • mysql中B+Tree索引的作用是什么
    本篇文章给大家分享的是有关mysql中B+Tree索引的作用是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1、概念B+Tree是在B-Tree基础上的一种优化,使其更适合...
    99+
    2023-06-15
  • MySQL的常用引擎为什么默认使用B+树作为索引
    本篇文章给大家分享的是有关MySQL的常用引擎为什么默认使用B+树作为索引,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、前言为了讲清楚这个...
    99+
    2022-10-19
  • 数据库索引的作用是什么
    本篇文章为大家展示了数据库索引的作用是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。首先明白为什么索引会增加速度,DB在执行一条Sql语句的时候,默认的方式是根...
    99+
    2022-10-18
  • 一文了解mysql索引的数据结构为什么要用B+树
    目录1. Hash表?No2. 二叉查找树(BST)?No3. 红黑树?No4. 平衡二叉树(AVL)?差那么二点意思5. B-tree(B-树也称B树)?差那么一点意思6. B+树...
    99+
    2022-11-13
  • MySQL数据库之索引的作用是什么
    MySQL数据库的索引是用于提高查询效率的一种数据结构。它可以帮助数据库系统快速定位和访问数据,减少数据的扫描量,从而提高查询的速度...
    99+
    2023-08-15
    MySQL数据库
  • 索引函数在 Java 中的作用是什么?
    在 Java 中,索引函数的作用是帮助程序员快速查找和获取数据。通常情况下,我们使用索引函数来优化程序的性能,特别是在大型数据集合中搜索数据时。 Java 中有很多索引函数可以使用,包括数组索引、哈希表索引、树索引等。在本文中,我们将着重...
    99+
    2023-09-02
    索引 函数 api
  • MySQL数据库索引和事务的作用是什么
    本篇内容主要讲解“MySQL数据库索引和事务的作用是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL数据库索引和事务的作用是什么”吧!1. 索引1.1 概念索引是为了加速对表中数据行...
    99+
    2023-06-22
  • Numpy在索引中的作用是什么?
    Numpy是Python中最常用的科学计算库之一,它提供了一个强大的多维数组对象,以及各种用于操作数组的函数和方法。在Numpy中,索引是非常重要的一个概念,它可以帮助我们快速地访问和操作数组中的元素。本文将介绍Numpy中索引的作用,以及...
    99+
    2023-06-04
    numpy 自然语言处理 索引
  • Java中数据类型索引的作用是什么?
    在Java中,数据类型是非常重要的一个概念,它们定义了变量可以存储的数据类型。Java中的数据类型包括基本数据类型和引用数据类型。在Java中,为了方便程序员使用和管理数据类型,引入了数据类型索引的概念。本文将介绍Java中数据类型索引的...
    99+
    2023-08-25
    数据类型 索引 spring
  • 数据库中索引有什么用
    这篇文章主要介绍数据库中索引有什么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!数据库索引的最大作用就是加快查询速度,它能从根本上减少需要扫表的记录行的数量,数据库索引就是数据库的...
    99+
    2022-10-18
  • MySQL数据库中索引有什么用
    这篇文章将为大家详细讲解有关MySQL数据库中索引有什么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、MySQL索引简介索引是MySQL数据库为了加快数据查询的速度,给表中的某一个或者是某几个列添加...
    99+
    2023-06-22
  • php中索引数组的作用是什么
    这篇文章给大家介绍php中索引数组的作用是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。PHP开发环境搭建工具有哪些一、phpStudy,是一个新手入门最常用的开发环境。二、WampServer,WampServe...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作