我听到了一些声明,例如,考虑AVL树的高度和AVL树节点可以包含的最大密钥,由于磁盘io,对AVL树的搜索将非常耗时。 但是,假设索引文件包含整个AVL树结构,然后索引文件的大小小于风扇大小,那么我们只能在一次磁盘io中读取整个AVL树。
使用AVL树似乎不会带来额外的磁盘io,您如何解释B树更好呢?
答案 0 :(得分:0)
数据库使用平衡二叉树(加)avl只是这些平衡树的特例,因此不需要它
答案 1 :(得分:0)
我们只能在一次磁盘io中读取整个AVL树
是的,它可以那样工作。本质上,整个数据结构将被带入内存。 IO不再是问题。
某些数据库使用此策略。例如,SQL Server内存“ Hekaton”可以做到这一点,并提供OLTP正常吞吐量的约100倍。
Hekaton使用两种索引数据结构:哈希表和树。我认为这些树称为cw树,与b树相似。
对于通用数据库工作负载,非常希望不需要内存中的所有内容。在这些情况下,B树是一个很好的设计折衷。
答案 2 :(得分:0)
它的因为 B 树通常在单个节点中有更多的键,因此减少了搜索的深度,如果深度越大,记录索引的链接遍历时间就越长,因此缓存局部性并使树更宽更深一层,多个键存储在一个节点的数组中,相对提高了缓存性能和快速查找。