資料庫 B樹 B+樹,資料庫b樹
在資料庫的索引中,一般是利用B樹或者B+樹進行檢索和查詢
介紹一下在兩種資料結構中資料的查詢方式:
1)B樹
B樹中每個節點包含了鍵值和鍵值對於的資料對象存放地址指標,所以成功搜尋一個對象可以不用到達樹的分葉節點。
成功搜尋包括節點內搜尋和沿某一路徑的搜尋,成功搜尋時間取決於關鍵碼所在的層次以及節點內關鍵碼的數量。
在B樹中尋找給定關鍵字的方法是:首先把根結點取來,在根結點所包含的關鍵字K1,…,kj尋找給定的關鍵字(可用順序尋找或二分尋找法),若找到等於給定值的關鍵字,則尋找成功;否則,一定可以確定要查的關鍵字在某個Ki或Ki+1之間,於是取Pi所指的下一層索引節點塊繼續尋找,直到找到,或指標Pi為空白時尋找失敗。
2)B+樹
B+樹非分葉節點中存放的關鍵碼並不指示資料對象的地址指標,非葉子節點只是索引部分。所有的分葉節點在同一層上,包含了全部關鍵碼和相應資料對象的存放地址指標,且分葉節點按關鍵碼從小到大順序連結。如果實際資料對象按加入的順序儲存而不是按關鍵碼次數儲存的話,分葉節點的索引必須是稠密索引,若實際資料存放區按關鍵碼次序存放的話,分葉節點索引時稀疏索引。
B+樹有2個頭指標,一個是樹的根節點,一個是最小關鍵碼的分葉節點。
所以 B+樹有兩種搜尋方法:
一種是按分葉節點自己拉起的鏈表順序搜尋。
一種是從根節點開始搜尋,和B樹類似,不過如果非分葉節點的關鍵碼等於給定值,搜尋並不停止,而是繼續沿右指標,一直查到分葉節點上的關鍵碼。所以無論搜尋是否成功,都將走完樹的所有層。
B+ 樹中,資料對象的插入和刪除僅在分葉節點上進行。
這兩種處理索引的資料結構不同之處:
a,B樹中同一鍵值不會出現多次,並且它有可能出現在葉結點,也有可能出現在非葉結點中。而B+樹的鍵一定會出現在葉結點中,並且有可能在非葉結點中也有可能重複出現,以維持B+樹的平衡。
b,因為B樹鍵位置不定,且在整個樹結構中只出現一次,雖然可以節省儲存空間,但使得在插入、刪除操作複雜度明顯增加。B+樹相比來說是一種較好的折中。
c,B樹的查詢效率與鍵在樹中的位置有關,最大時間複雜度與B+樹相同(在葉結點的時候),最小時間複雜度為1(在根結點的時候)。而B+樹的時候覆雜度對某建成的樹是固定的。
對B,B+,B-,B* 樹的講解,可以參照
http://www.cnblogs.com/oldhorse/archive/2009/11/16/1604009.html
B樹:二叉樹,每個結點只儲存一個關鍵字,等於則命中,小於走左結點,大於
走右結點;
B-樹:多路搜尋樹,每個結點儲存M/2到M個關鍵字,非葉子結點儲存指向關鍵
字範圍的子結點;
所有關鍵字在整顆樹中出現,且只出現一次,非葉子結點可以命中;
B+樹:在B-樹基礎上,為葉子結點增加鏈表指標,所有關鍵字都在葉子結點
中出現,非葉子結點作為葉子結點的索引;B+樹總是到葉子結點才命中;
B*樹:在B+樹基礎上,為非葉子結點也增加鏈表指標,將結點的最低利用率,在B+樹的非根和非葉子結點再增加指向兄弟的指標
從1/2提高到2/3;