1. 程式人生 > >資料庫索引為什麼要用 B+ 樹而不用紅黑樹呢?

資料庫索引為什麼要用 B+ 樹而不用紅黑樹呢?

AVL 樹和紅黑樹這些二叉樹結構的資料結構可以達到最高的查詢效率這是毋庸置疑的。

既然如此,那麼資料庫索引為什麼不用 AVL 樹或者紅黑樹呢?

這就牽扯到一個問題了,不考慮每種資料結構的前提條件而選擇資料結構都是在耍流氓。

AVL 數和紅黑樹基本都是儲存在記憶體中才會使用的資料結構,那磁碟中會有什麼不同呢?

這就要牽扯到磁碟的儲存原理了

作業系統讀寫磁碟的基本單位是扇區,而檔案系統的基本單位是簇(Cluster)。

也就是說,磁碟讀寫有一個最少內容的限制,即使我們只需要這個簇上的一個位元組的內容,我們也要含著淚把一整個簇上的內容讀完。

那麼,現在問題就來了

一個父節點只有 2 個子節點,並不能填滿一個簇上的所有內容啊?那多餘的內容豈不是要浪費了?我們怎麼才能把浪費的這部分內容利用起來呢?哈哈,答案就是 B+ 樹。

由於 B+ 樹分支比二叉樹更多,所以相同數量的內容,B+ 樹的深度更淺,深度代表什麼?代表磁碟 io 次數啊!資料庫設計的時候 B+ 樹有多少個分支都是按照磁碟一個簇上最多能放多少節點設計的啊!

所以,涉及到磁碟上查詢的資料結構,一般都用 B+ 樹啦。