補充:數據庫
B-tree(多路搜索樹,並非二叉的)是一種常見的數據結構。使用B-tree結構能夠顯著減小定位記錄時所經歷的中間過程,從而加快存取速度。按照翻譯,B 一般認爲是Balance的簡稱。這個數據結構通常用於數據庫的索引,綜合效率較高。數據結構
B-樹 就是指 B樹,也是一種用於查找的平衡樹,可是它不是二叉樹,B樹能夠擁有多於2個子節點,可以用來存儲排序後的數據。這種數據結構可以讓查找數據、循序存取、插入數據及刪除的動做,都在對數時間內完成。這種數據結構常被應用在數據庫和文件系統的實做上。翻譯
定義任意非葉子結點最多隻有M個兒子;且M>2。3d
根結點的兒子數爲[2, M]。指針
除根結點之外的非葉子結點的兒子數爲[M/2, M]。orm
每一個結點存放至少M/2-1(取上整)和至多M-1個關鍵字;(至少2個關鍵字)。cdn
非葉子結點的關鍵字個數=指向兒子的指針個數-1。blog
非葉子結點的關鍵字:K[1], K[2], …, K[M-1];且K[i] < K[i+1]。排序
非葉子結點的指針:P[1], P[2], …, P[M];其中P[1]指向關鍵字小於K[1]的子樹,P[M]指向關鍵字大於K[M-1]的子樹,其它P[i]指向關鍵字屬於(K[i-1], K[i])的子樹。索引
全部葉子結點位於同一層。
B+樹 是 B樹 的變體,也是一種多路搜索樹
其定義基本與B-樹相同,除了:
非葉子結點的子樹指針與關鍵字個數相同。
非葉子結點的子樹指針P[i],指向關鍵字值屬於[K[i], K[i+1])的子樹(B-樹是開區間)。
爲全部葉子結點增長一個鏈指針。
全部關鍵字都在葉子結點出現。
特性:
全部關鍵字都出如今葉子結點的鏈表中(稠密索引),且鏈表中的關鍵字剛好是有序的。
不可能在非葉子結點命中。
非葉子結點至關因而葉子結點的索引(稀疏索引),葉子結點至關因而存儲(關鍵字)數據的數據層。
B+樹的分裂:當一個結點滿時,分配一個新的結點,並將原結點中1/2的數據複製到新結點,最後在父結點中增長新結點的指針;B+樹的分裂隻影響原結點和父結點,而不會影響兄弟結點,因此它不須要指向兄弟的指針。
更適合文件索引系統。
是 B+樹 的變體,在 B+樹 的非根和非葉子結點再增長指向兄弟的指針
特性:
B**樹定義了非葉子結點關鍵字個數至少爲(2/3)*M,即塊的最低使用率爲2/3(代替B+樹的1/2)。
B*樹的分裂:當一個結點滿時,若是它的下一個兄弟結點未滿,那麼將一部分數據移到兄弟結點中,再在原結點插入關鍵字,最後修改父結點中兄弟結點的關鍵字(由於兄弟結點的關鍵字範圍改變了);若是兄弟也滿了,則在原結點與兄弟結點之間增長新結點,並各複製1/3的數據到新結點,最後在父結點增長新結點的指針。
因此,B*樹分配新結點的機率比B+樹要低,空間使用率更高。
本篇到此完結,若有補充內容隨時更新!歡迎關注本人繼續跟進技術乾貨的更新!