[英]Why use B tree for database index other than AVL tree
我听过一些说法,比如考虑AVL树的高度和一个AVL树节点可以包含的最大keys,因为磁盘io,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.