b+樹是b樹的變體,也是一種多路搜尋樹
1.非葉子節點的子樹指標與關鍵字個數相同;
2.為所有葉子節點增加乙個鏈指標;
3.所有關鍵字都在葉子節點出現;
b+樹插入新元素時,可能會遇到3種情況
leaf page full
index page full
操作no
no直接將記錄插入葉節點
yesno
1. 拆分leaf page
2. 將中間節點放入index page中
3. 小於中間節點的記錄放在左邊
4. 大於等於中間節點的記錄放在右邊
yesyes
1. 拆分leaf page
2. 小於中間節點的記錄放在左邊
3. 大於等於中間節點放在記錄右邊
4. 拆分index page
5. 小於中間節點的記錄放在左邊
6. 大於中間節點的記錄放在右邊
7. 中間節點放在上一層 index page
下面演示b+樹結構,高度為2,每頁可存放4條記錄
2)插入70滿足第二種情況,leaf page已滿,index page還沒滿,50,55,60,65,70的中間值為60由於每頁最多放4條記錄需要拆分leaf page(雙向鍊錶一直存在沒畫出)
插入95 滿足第三種情況75,80,85,90,95中間值是85放在index page(已滿)60位index page的中間值放在上層index page這樣一層index變成了60第二層index page變成了
25,50,75,85插入95後如下圖
b+樹的刪除操作 b+
樹使用填充因子來控制數的刪除變化。填充因子可以設定的最小值為50%。b+樹的刪除操作同樣保證刪除後葉節點的記錄依然排序。
根據填充因子的變化,b+樹刪除操作也分為3種情況
leaf page below fill factor
index page below fill factor
操作no
no直接將記錄從葉節點刪除,如果該節點還是index page的節點,則用該節點的右節點代替
yesno
合併葉節點及其節點,同時更新index page
yesyes
1. 合併葉節點及其兄弟節點
2. 更新index page
3. 合併index page及其兄弟節點
刪除70符合第一種情況
刪除25後和上面一樣不同的是該值還是index page中的值。因此在刪除leaf page中的25後,還需要將25的右兄弟節點28更新到index page中
刪除leaf page鍵值為60的記錄後,其填充因子小於50%。需要做合併操作。同樣在刪除index page中相關記錄後需要做index page的合併操作
索引之B樹 B 樹 B 樹 B 樹
原文索引之b樹 b 樹 b 樹 b 樹 b 樹即二叉搜尋樹 1.所有非葉子結點至多擁有兩個兒子 left 和right 2.所有結點儲存乙個關鍵字 3.非葉子結點的左指標指向小於其關鍵字的子樹,右指標指向大於其關鍵字的子樹 如 b樹的搜尋,從根結點開始,如果查詢的關鍵字與結點的關鍵字相等,那麼就命中...
B樹與B 樹索引
b 樹 資料庫結構使用樹的結構索引,從演算法邏輯上看,二叉查詢樹的查詢速度和比較次數都是最小的。資料庫的索引儲存在磁碟上,當資料量比較大的時候,索引的大小可能有幾個g 甚至更多。當我們利用索引查詢的時候,不可能把整個索引載入到記憶體,能做的只有逐一載入每乙個磁碟頁,磁碟頁對應索引樹的節點。當利用二叉...
B樹 B 樹及索引
b樹 每個節點都儲存key和data,所有節點組成這棵樹,並且葉子節點指標為null。b 樹 只有葉子節點儲存data,葉子節點包含了這棵樹的所有鍵值,葉子節點不儲存指標。後來在b 樹上加了順序訪問指標,也就是每個葉子節點增加乙個指向相鄰葉子節點的指標。可以像遍歷鍊錶一樣遍歷葉子節點。b 樹是資料庫...