一棵m階的
b+樹和m階的
b-樹的異同點在於:
1.有n棵子樹的結點中含有n 個關鍵字
,即每個關鍵碼對應一顆子樹
2.所有的終端結點中包含了全部關鍵字的資訊
,及指向含有這些關鍵字記錄的指標,且終端結點本身依關鍵字的大小自小而大的順序鏈結。
(而b- 樹
的葉子節點並沒有包括全部需要查詢的資訊
)3.所有的
非終端結點可以看成是索引部分,
結點中僅含有其子樹根結點中最大(或最小)關鍵字
。(而b- 樹
的非終節點也包含需要查詢的有效資訊
)4.所有外結點均不是空指標,而是作為指向關鍵碼所對應記錄在檔案中的位置指標。
由於在m階b+樹中,每個結點最多有m棵子樹,故,m階b+樹的結點所含關鍵碼的最大個數為m,而在m階b-樹的結點中所含關鍵碼的最大個數為m-1.m階b+樹的結點所含關鍵碼的個數n的最大值可為m。
(1)根
結點只有1個,
分支數量範圍[2,m]
。(2)除根以外的非葉子結點,每個結點包含
分支數範圍[[m/2],m]
,其中[m/2]表示取大於m/2的最小整數(向上取整)
(3)所有非葉子節點的
關鍵字數目等於它的分支數量
。(4) 所有葉子節點都在同一層,且關鍵字數目範圍是[[m/2],m],其中[m/2]表示取大於m/2的最小整數。
(5)所有非葉子節點的關鍵字可以看成是索引部分,這些索引等於其子樹(根結點)中的最大(或最小)關鍵字。例如乙個非葉子節點包含資訊: (n,a1,k1, a2,k2,……,an,k
n),其中ki為關鍵字,ai為指向子樹根結點的
指標,n表示關鍵字個數。即ai所指子樹中的關鍵字均小於或等於ki,而a
i+1所指的關鍵字均大於ki(i=1,2,……,n)。
(6)葉子節點包含全部關鍵字的資訊(非葉子節點只包含索引),且葉子結點中的所有關鍵字依照大小順序鏈結(所以
乙個b+樹通常有兩個頭指標,乙個是指向根節點的root,另乙個是指向最小關鍵字的sqt
b+樹查詢:
在b+樹上查詢時,若在非終端結點上有關鍵碼等於給定值,並不終止,而是繼續向下直到終端結點
。因此,
在b+樹上不管查詢成功與否,每次查詢都是走了一條從根節點到終端結點的路徑。
插入:b+樹
插入僅在終端節點上進行,當終端節點中關鍵碼個數大於m時要**成兩個結點
(插入後含m+1個關鍵碼):若m為奇數,則**所得兩個結點所含關鍵碼個數均為(m+1)/2;若m偶,則分為m/2和m/2+1個。它們雙親結點中應同時包含這兩個節點中的最大關鍵碼。
在深度大於1的b+樹上
插入乙個比根節點上最大關鍵碼還要大的關鍵碼時
,為不破壞b+樹特性:
將根至終端結點路徑上結點(不包括終端結點)中的原最大關鍵碼改為新插入的較大關鍵碼,而僅在終端結點中將新插入的較大關鍵碼加在原最大關鍵碼之後
,然後檢查終端結點是否滿足m階b+樹定義要求。若加入後,關鍵碼個數仍小於或等於m,則不需**結點,若加入後終端結點中關鍵碼個數為m+1,則對該終端結點進行**-提公升操作。
刪除:僅在終端結點進行
。當終端結點最大關鍵碼被刪,則在非終端結點中的值(即為該最大關鍵碼)可作為乙個「分界關鍵碼」存在。若為b+樹的組織嚴格,
可將次大關鍵碼提公升到其父結點代替原來的最大關鍵碼,進一步上傳直至根結點
。若因刪除,使結點中關鍵碼個數少於[m/2],進行合併操作。
b+樹特
適合範圍查詢
。一旦找到範圍中第乙個關鍵碼及記錄,就可在該終端結點或順著該終端結點往後的連線指標,根據範圍的上界值,快速找出所給範圍內的所有關鍵碼及記錄。
用途:b+ 樹通常
用於資料庫
和作業系統的檔案系統
中。ntfs, reiserfs, nss, xfs, jfs, refs 和bfs等檔案系統都在使用b+樹作為元資料索引。
b+ 樹的特點是能夠保持資料穩定有序,其插入與修改擁有較穩定的對數時間複雜度。b+ 樹元素自底向上插入。
b+樹主要用於
磁碟,拆分意味著磁碟的操作,應該在可能的情況下儘量減少頁的拆分。
樹形索引(B 樹查詢 插入 刪除)
b 樹上每個節點包含多個關鍵碼從小到大排序,是一種平衡的多路查詢樹。最底層節點稱為外節點或葉結點,一般可省略。除了外結點,b 樹上的節點還有終端結點 葉結點的上一層 和非終端結點 終端結點層以上的結點 一顆m階b 樹,或為空樹,或為滿足下列特性的m叉樹 1 樹中每個結點最多有m顆子樹 2 若根節點不...
索引之B樹 B 樹 B 樹 B 樹
原文索引之b樹 b 樹 b 樹 b 樹 b 樹即二叉搜尋樹 1.所有非葉子結點至多擁有兩個兒子 left 和right 2.所有結點儲存乙個關鍵字 3.非葉子結點的左指標指向小於其關鍵字的子樹,右指標指向大於其關鍵字的子樹 如 b樹的搜尋,從根結點開始,如果查詢的關鍵字與結點的關鍵字相等,那麼就命中...
B樹與B 樹索引
b 樹 資料庫結構使用樹的結構索引,從演算法邏輯上看,二叉查詢樹的查詢速度和比較次數都是最小的。資料庫的索引儲存在磁碟上,當資料量比較大的時候,索引的大小可能有幾個g 甚至更多。當我們利用索引查詢的時候,不可能把整個索引載入到記憶體,能做的只有逐一載入每乙個磁碟頁,磁碟頁對應索引樹的節點。當利用二叉...