數據庫 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/2M個關鍵字,非葉子結點存儲指向關鍵

字範圍的子結點;

    所有關鍵字在整顆樹中出現,且只出現一次,非葉子結點可以命中;


B+樹:在B-樹基礎上,爲葉子結點增加鏈表指針,所有關鍵字都在葉子結點

中出現,非葉子結點作爲葉子結點的索引;B+樹總是到葉子結點才命中;


 B*樹:在B+樹基礎上,爲非葉子結點也增加鏈表指針,將結點的最低利用率,B+樹的非根和非葉子結點再增加指向兄弟的指針

1/2提高到2/3



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章