繁体   English   中英

为什么要使用 B 树作为 AVL 树以外的数据库索引

[英]Why use B tree for database index other than AVL tree

我听过一些说法,比如考虑AVL树的高度和一个AVL树节点可以包含的最大keys,因为磁盘i​​o,AVL树的搜索会很耗时。 但是,假设一个索引文件包含了整个 AVL 树结构,然后索引文件的大​​小小于一个扇形大小,我们可以只在一次磁盘 io 中读取整个 AVL 树。

好像使用AVL树不会带来额外的磁盘io,你怎么解释B树更好?

数据库使用平衡二叉树(加上) avl 只是这些平衡树的一个特例,所以没有必要

我们只能在一次磁盘 io 中读取整个 AVL 树

是的,它可以这样工作。 本质上,整个数据结构将被带入内存。 IO 将不再是一个问题。

一些数据库使用这种策略。 例如,SQL Server In-Memory "Hekaton" 执行此操作并为 OLTP 提供约 100 倍的正常吞吐量。

Hekaton 使用两种索引数据结构:哈希表和树。 我认为这些树被称为 cw-trees,类似于 b-trees。

对于通用数据库工作负载,非常希望不需要内存中的所有内容。 在这些情况下,B 树是一个很好的设计权衡。

它的因为 B 树通常在单个节点中具有更多的键,因此降低了搜索的深度,在记录索引中,如果深度更大,则链接遍历时间更长,因此对于缓存局部性并使树更宽而不是更深,多个键存储在一个节点的数组中,相对提高了缓存性能和快速查找。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM