首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用B树和B+-树的范围查询

使用B树和B+-树的范围查询
EN

Stack Overflow用户
提问于 2016-06-09 16:03:24
回答 1查看 6.6K关注 0票数 3

我正在编写一个程序来检索给定范围内的对象数,并且我使用B树数据结构来实现我的解决方案,因为对象的数量不能适应RAM。我看到几篇文章说,B+树在范围查询方面远远优于B树,并且被所有主要的数据库实现所使用。我无法理解为什么B+树优于B树,因为所有数据都存储在叶子上,需要h(树的高度)磁盘访问来检索节点并执行范围查询,而在B树中,间隔可能位于父节点上,因此磁盘访问将被最小化。此外,如果我有一个查询,比如返回某个特定键的对象#,那么我可能能够在下降到叶子之前定位这个键,就像在B+树中一样。那么,为什么他们说B+树在范围查询方面比B树更有效呢?如果我必须编写一个程序来执行范围查询,B树不应该是正确的数据结构吗?谢谢您的回复!

EN

回答 1

Stack Overflow用户

发布于 2016-06-10 05:34:02

实际的B树和B+树实现往往有固定字节大小的节点,这些节点被选择来匹配体系结构的页面大小,或者像磁盘上的集群大小这样的其他固定设备。一个典型的值将是4096字节。

B+树可以将更多的键放入内部节点,因为记录数据不需要空间。这提供了更高的扇出(较低的树高)和更好的缓存使用,因为给定的一组索引页(内部节点)“覆盖”的查询比B树的查询要多。

B+树的第二个优点是,内部节点中的密钥仅用于将搜索路由到右叶。他们只需要把左边的东西和右边的东西分开,但是它们不需要与任何实际的记录键相对应。这意味着它们通常可以被缩短,而且还意味着删除不需要从叶层传播到索引层(也就是说,一旦从叶中删除了一个键,就完成了-除了在重新平衡过程中自然发生的情况之外,不需要从内部节点删除任何内容)。

另外,在典型的B+树中,叶节点具有指向其左右兄弟节点的指针。这意味着您可以通过遍历链接的页面列表来遍历一系列记录,而不必使用B树典型的复杂迭代逻辑。

在B树中,间隔可能位于父节点上,因此磁盘访问将被最小化。

为了使这个理论得到休息,估计B树的内部节点中有多少键总数,叶节点中有多少键总数。这一比率告诉你,在下降到叶级之前,搜索可能会提前停止多久。注意:早出方案只适用于在树中恰好存在精确键的查询;否则,就不可避免地会出现适当的叶级。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37731060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档