怎么看b树是几阶_理解B+树索引以及它们如何影响性能

本文为翻译的文章,作者ovais.tariq,原文:

http://www.ovaistariq.net/733/understanding-btree-indexes-and-how-they-impact-performance/#.Wz8dxNIzZPZ

索引是数据库中非常重要的部分,经常用来加快对于特定数据项的访问。所以在使用索引之前,先搞清楚索引在幕后是如何工作的,以及用来保存索引的数据结构是什么,是很重要的,因为,除非你理解索引的内部工作机制,否则你永远不能充分利用它的能力。

B+树索

索引是以B+树数据结构的形式保存到磁盘上的。B+树在很多方面都与二叉查找树相似。B+树与二叉查找树的结构完全一样,因为对每个结点来说,左子树上所有结点的值都小于该结点的值,右子树上所有结点的值都大于该结点的值。

但也有一些重要的区别:

  • B+树在一个结点中可能包含多个键。事实上,一个典型的结点包含了上千个键,因此B+树的分支因子很大,与二叉查找树相比,B+树就要浅得多。
  • B+树把所有的值保存在叶子结点【译者注:非叶子结点只包含索引】。所有的叶子结点高度相同,这意味着每次索引查找都使用了相同次数的B+树搜索。
  • B+树的叶子结点都使用链表从左到右连在一起,因而叶子结点的值是有序的,范围查找就非常高效。

一棵典型的B+树

下面是一棵典型的B+树:

d50550dac055dc625a8f944925b86899.png

为什么使用B+树索

使用B+树的主要原因是速度。我们知道,内存有空间大小的限制,不是所有的数据都在内存中,因而大部分的数据都保存到磁盘上。与内存相比,磁盘要慢得多,因为它有活动部件。所以,如果在数据库中没有树形结构来进行查找,DBMS必须要在所有记录中进行顺序扫描。想象一下如果数据有10亿行,那么很明显,顺序扫描要花很长的时间。

但是有了B+树,可以把10亿个键值(指向10亿行记录的指针)保存在第3,4或者5层的高度上,所以每次对于10亿个键的搜索都进行3,4或者5次磁盘访问,大大减少了I/O次数。

选择B+树而不是其它树形结构,是因为B+树非常浅,每次查找都转换成一次磁盘访问,磁盘访问的次数与树的高度成正比,所以树越浅,磁盘访问的次数就越少。

B+树是如何组织的

B+树通常是这么组织的:根据页大小来选择结点的大小。为什么?因为访问磁盘上的数据,都是读取整页的数据,而不是读取部分数据,因为这样成本要低得多。

让我们来看个例子。

InnoDB的页大小是16KB,假定我们在一个整型字段中有一个大小为4B的索引,所以一个结点最多包含16 * 1024 / 4 = 4096 个键,且最多有4097个子结点。

所以对于一个高度为1的B+树,根结点有4096 个键,第一层结点(叶子结点)有4096 * 4097 = 16781312个键值。

这显示了B+树的效率,超过1600多万个键值可以被存储在B+树的第一层,因而每个键值都可以通过2次查找来获得。

索引值的大小有多重要

从前面的例子可以看出,索引值的大小扮演了非常重要的角色,因为:

  • 索引越长,能够装进结点的数量就越少,因而B+的高度就越大
  • 树越高,就需要越多的磁盘访问
  • 磁盘访问的次数越多,性能越低

所以索引值的大小对于性能有直接的影响。我希望你理解B+树是怎么工作的,以及如何使用它们来提升查找的性能。我希望你能理解,让B+树的高度小一些是多么重要,因为这样就可以减少磁盘访问的次数。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
树和二叉树是常见的非线性数据结构,它们在实际应用中具有很重要的意义。下面我将探讨一些应用中开发使用了相关技术。 1. 树的应用 树常见的应用场景有: - 文件系统:文件系统中的目录结构通常是一个树形结构,每个目录都可以包含多个子目录和文件,通过树的遍历可以实现文件和目录的查找和管理。 - 数据库索引:数据库中的索引通常采用B树或者B+树来实现,通过树的结构可以实现快速的数据查找和排序。 - XML文档解析:XML文档通常采用树形结构来表示,通过树的遍历可以实现XML文档的解析和处理。 2. 二叉树的应用 二叉树常见的应用场景有: - 表达式求值:将中缀表达式转换为二叉树,通过遍历二叉树来计算表达式的值。 - 哈夫曼编码:哈夫曼编码通常采用二叉树来实现,通过构建哈夫曼树来生成最优的编码方案。 - 机器学习中的决策树:决策树通常采用二叉树来实现,通过构建决策树来实现分类和预测。 树和二叉树的重要意义: - 树和二叉树的结构清晰,易于理解和操作,可以用来表示复杂的关系和结构。 - 树和二叉树具有高效的查找和遍历算法,能够快速地查找、处理和修改数据。 - 树和二叉树可以通过递归算法实现,递归算法的思想和应用在计算机科学中非常重要。 综上所述,树和二叉树在实际应用中具有很重要的意义,它们为数据的处理和管理提供了高效、可靠的方式。开发者可以根据具体的问题需求和性能要求选择合适的树形结构,并采用相应的算法来实现数据的处理和管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值