Java多執行緒01:什麼是執行緒和執行緒的建立
阿新 • • 發佈:2022-03-25
1.簡介
B+樹是一顆多路搜尋樹。
一顆 m 階的B+樹主要特點:
每個結點至多有m個子女
非根結點關鍵值個數範圍: [m/2 - 1, m - 1]
相鄰葉子節點是通過指標連起來的,並且是關鍵字大小排序的。
B+樹和B樹區別:
1. B-樹內部節點是儲存資料的;而B+樹內部節點是不儲存資料的,只作索引作用,它的葉子節點才儲存資料。
2. B+樹相鄰的葉子節點之間是通過連結串列指標連起來的,B-樹卻不是。
3. B-樹中任何一個關鍵字出現且只出現在一個結點中,而B+樹可以出現多個結點中。
2.B+插入
3.B+查詢
以下面的B+樹為例:
B+樹單值查詢
B+樹範圍查詢
4.B+樹的刪除
幾種情況
以下面的B+樹為例:假設當前有這麼一顆5階的B+樹
情況1:如果關鍵字個數大於⌈m/2⌉,直接刪除即可;
情況2:如果關鍵字個數大於⌈m/2⌉-1,並且刪除的關鍵字存在於父子節點中,那麼需要相應調整父子節點的值
情況3:如果刪除該關鍵字後,關鍵字個數小於⌈m/2⌉-1,兄弟節點可以借用
以下面5階的B+樹為例
情況4:在刪除關鍵字後,如果導致其結點中關鍵字個數不足,並且兄弟結點沒有得借用的話,需要合併兄弟結點
以下面5階的B+樹為例
5.經典面試題
1.InnoDB一顆B+樹可以存放多少行資料?
2.為什麼索引結構預設使用B+樹,而不是B-Tree,Hash雜湊,二叉樹,紅黑樹?
Hash雜湊,只適合等值查詢,不適合範圍查詢。
一般二叉樹,可能會特殊化為一個連結串列,相當於全表掃描。
紅黑樹,是一種特化的平衡二叉樹,MySQL 資料量很大的時候,索引的體積也會很大,記憶體放不下的而從磁碟讀取,樹的層次太高的話,讀取磁碟的次數就多了。
B-Tree,葉子節點和非葉子節點都儲存資料,相同的資料量,B+樹更矮壯,也是就說,相同的資料量,B+樹資料結構,查詢磁碟的次數會更少。