SQL Server – 樹結構 (二叉樹, 紅黑樹, B-樹, B+樹)

前言

很久以前有學習過各種樹結構, 但後來真的沒有在實際項目中運用到. 畢竟我主要負責的都是寫業務代碼. 太上層了

但是忘光光還是很可惜的. 所以久久可以複習一下. 記得概念也好, 幫助思考.

 

參考:

mysql底層原理-二叉樹、紅黑樹、BTree、B+Tree

 

二叉樹

規則是左邊要比右邊小. 它最大的問題就是會很深, 像上面這樣. 每多一層就 IO 讀寫多一次, 就慢 (因爲讀 IO 是物理操作, 要移動磁頭, 這個和讀 ram 通通電, 不同級別). 所以它不可以用來做 database 數據結構.

 

紅黑樹

紅黑是二叉的查詢優化, 所有查詢優化都是建立在提前對數據結構處理的. 所以 insert, update, delete 一定會變慢.

紅黑樹多了一些規則, 確保樹沒有那麼深 (做了一些平衡), 每當新節點插入的時候, 樹結構就有可能因爲要滿足條件而調整.

 

B 樹

B 樹有對紅黑進行了優化, 利用了磁盤每一次讀取最少 16k 的原理, 它把每個節點都大一些, 那麼上面一個圓圈就不只一個數目. 

和紅黑的目的一樣就是想辦法讓樹不要那麼深, 減少磁盤讀取. 

 

B+ 樹

對 B 樹做了優化, data size 太大, 會導致磁盤塊太大, 所以把 data 都移到了最底部.

 

結論

數據庫的設計和找字典是一樣概念, 上面這些磁盤塊, 就好比字典的目錄, 

比如我找 Derrick 這個字, 一頁一頁翻肯定很慢, 但是有一個 A-Z 的目錄, 裏面就 26 個字母. 

先把目錄讀出來, 然後 loop 到 D, 那麼就鎖定 D 的範圍了. 過濾了大部分不相關的字.

所謂的 index 就是目錄. 依據不同 column 排序.

p.s 紅黑, B 樹 抽象都是平衡二叉樹, 目的都爲了平衡, B-樹就是B樹來的. 只是因爲有一個B+樹所以就把原來的叫B-樹.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章