有了b樹,為什麼還需要b+樹呢?那就要先說下b樹的缺點了,人類對於效能的追求是無止境的,b樹相比二叉樹雖好,但還是存在以下問題:
1.每個節點中既要存索引資訊,又要存其對應的資料,如果資料很大,那麼當樹的體量很大時,每次讀到記憶體中的樹的資訊就會不太夠。
2.b樹遍歷整個樹的過程和二叉樹本質上是一樣的,b樹相對二叉樹雖然提高了磁碟io效能,但並沒有解決遍歷元素效率低下的問題。
針對以上兩個問題,b+樹誕生了,b+樹相比b樹,本質上是一樣的,區別就在與b+樹的所有根節點都不帶有任何資料資訊,只有索引資訊,所有資料資訊全部儲存在葉子節點裡,這樣,整個樹的每個節點所佔的記憶體空間就變小了,讀到記憶體中的索引資訊就會更多一些,相當於減少了磁碟io次數,問題1就得到了解決。又由b樹的性質可以得到,所有葉子節點都會在同一層,b+樹會以乙個鍊錶的形式將所有葉子節點的資訊全部串聯起來,這樣,想遍歷所有資料資訊只需要順序遍歷葉子節點就可以了,方便又高效,問題二就得到了解決。不僅如此,b+樹還有乙個相應的優質特性,就是b+樹的查詢效率是非常穩定的,因為所有資訊都儲存在了葉子節點裡面,從根節點到所有葉子節點的路徑是相同的。那麼,我們總結一下b+樹的優點:
(1) b+樹的磁碟讀寫代價更低
b+的內部結點並沒有指向關鍵字具體資訊的指標。因此其內部結點相對b樹更小。如果把所有同一內部 結點的關鍵字存放在同一盤塊中,那麼盤塊所能容納的關鍵字數量也越多。一次性讀入記憶體中的需要查詢的 關鍵字也就越多。相對來說io讀寫次數也就降低了。
(2)b+樹的資料資訊遍歷更加方便
b+樹只要遍歷葉子節點就可以實現整棵樹的遍歷,而b樹不支援這樣的操作(或者說效率太低),而且 在資料庫中基於範圍的查詢是非常頻繁的,所以資料庫索引基本採用b+樹
(3) b+樹的查詢效率更加穩定
由於非終結點並不是最終指向檔案內容的結點,而只是葉子結點中關鍵字的索引。所以任何關鍵字的查 找必須走一條從根結點到葉子結點的路。所有關鍵字查詢的路徑長度相同,導致每乙個資料的查詢效率相當。
深入理解B 樹與B 樹
在看這篇文章之前,我們回顧一下前面的幾篇關於mysql的文章,應該對你讀下面的文章有所幫助。在介紹b 樹之前,先簡單的介紹一下b樹,這兩種資料結構既有相似之處,也有他們的區別,最後,我們也會對比一下這兩種資料結構的區別。1.1 b樹概念 b樹也稱b 樹,它是一顆多路平衡查詢樹。二叉樹我想大家都不陌生...
B樹B 樹B 樹和B 樹
原文link b樹 即二叉搜尋樹 1.所有非葉子結點至多擁有兩個兒子 left和right 2.所有結點儲存乙個關鍵字 3.非葉子結點的左指標指向小於其關鍵字的子樹,右指標指向大於其關鍵字的子樹 如 b樹的搜尋,從根結點開始,如果查詢的關鍵字與結點的關鍵字相等,那麼就命中 否則,如果查詢關鍵字比結點...
B 樹 B 樹 B 樹和B 樹
b樹 即二叉搜尋樹 1.所有非葉子結點至多擁有兩個兒子 left 和right 2.所有結點儲存乙個關鍵字 3.非葉子結點的左指標指向小於其關鍵字的子樹,右指標指向大於其關鍵字的子樹 如 b樹的搜尋,從根結點開始,如果查詢的關鍵字與結點的關鍵字相等,那麼就命中 否則,如果查詢關鍵字比結點關鍵字小,就...