[英]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.