1. 程式人生 > >資料庫為什麼用B+樹

資料庫為什麼用B+樹

  • B樹的特點:首先B樹是很嚴格的平衡二叉搜尋樹(葉子節點深度都相同,相比較而言紅黑樹那傢伙可沒這麼守規矩), 每個節點中的關鍵字可以有很多。 由於 1 中所述的原因, B樹的節點大小與磁碟頁一樣大(Linux中一般是4K)。至於為什麼要和磁碟也一樣大?這是和虛擬儲存器系統執行的機制有關,儲存器對映是虛擬頁(磁碟, linux中一般是4K)對映到物理頁(主存,Linux中一般是4K),然後由虛擬儲存器系統在背後默默地悄無聲息地完成資料移動的工作。 這樣B樹的每個節點的關鍵字數就很多了,具體取決於關鍵字(及其所帶的衛星資料)相對於磁碟頁的大小,《演算法導論》(B樹章節)中說一般是50~2000之間。 這麼大的分支因子,使得B樹樹深較小,讀寫磁碟次數大大減少。
    由於B樹根節點一般常駐記憶體,很明顯,要讀取某一結點上的資料所需讀寫磁碟的次數就等於該節點的深度。並且由於讀寫資料一般都具有區域性性(空間區域性性和時間區域性性)的原因,使得讀寫磁碟減少的次數比想象中的還好(你明明只是餓了,叫了份外賣,結果送外賣的還是個美女)。