簡體   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