为什么将B树用于AVL树以外的数据库索引

时间:2019-05-06 03:33:50

标签: database indexing data-structures

我听到了一些声明,例如,考虑AVL树的高度和AVL树节点可以包含的最大密钥,由于磁盘io,对AVL树的搜索将非常耗时。 但是,假设索引文件包含整个AVL树结构,然后索引文件的大​​小小于风扇大小,那么我们只能在一次磁盘io中读取整个AVL树。

使用AVL树似乎不会带来额外的磁盘io,您如何解释B树更好呢?

3 个答案:

答案 0 :(得分:0)

数据库使用平衡二叉树(加)avl只是这些平衡树的特例,因此不需要它

答案 1 :(得分:0)

  

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

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

某些数据库使用此策略。例如,SQL Server内存“ Hekaton”可以做到这一点,并提供OLTP正常吞吐量的约100倍。

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

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

答案 2 :(得分:0)

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