B-樹,B+樹與B*樹的優缺點比較

來源:互聯網
上載者:User
首先注意:B樹就是B-樹,"-"是個連字號號,不是減號。 
B-樹是一種 平衡的多路 尋找(又稱排序)樹,在檔案系統中有所應用。主要用作檔案的索引。 其中的B就表示平衡(Balance) 

B+樹有一個最大的好處,方便掃庫,B樹必須用中序遍曆的方法按序掃庫
,而B+樹直接從葉子結點挨個掃一遍就完了。 

B+樹支援range-query(區間查詢)非常方便,而B樹不支援。這是資料庫選用B+樹的最主要原因。 

比如要查 5-10之間的,B+樹一把到5這個標記,再一把到10,然後串起來就行了,B樹就非常麻煩。B樹的好處,就是成功查詢特別有利,因為樹的高度總體要比B+樹矮。不成功的情況下,B樹也比B+樹稍稍佔一點點便宜。 

B樹的優勢是當你要尋找的值恰好處在一個非葉子節點時,尋找到該節點就會成功並結束查詢, 而B+樹由於非分葉節點只是索引部分,這些節點中只含有其子樹中的最大(或最小)關鍵字,當非終端節點上的關鍵字等於給點值時,尋找並不終止,而是繼續向下直到葉子節點。 因此在B+樹中,無論尋找成功與否,都是走了一條從根到葉子節點的路徑 。 
有很多基於頻率的搜尋是選用B樹,越頻繁query的結點越往根上走,前提是需要對query做統計,而且要對key做一些變化。 
另外B樹也好B+樹也好,根或者上面幾層因為被反覆query,所以這幾塊基本都在記憶體中,不會出現讀磁碟IO,一般已啟動的時候,就會主動換入記憶體。 mysql底層儲存是用B+樹實現的,因為記憶體中B+樹是沒有優勢的,但是一到磁碟,B+樹的威力就出來了。 


B*樹 
是B+樹的變體,在B+樹的非根和非葉子結點再增加指向兄弟的指標;B*樹定義了非葉子結點關鍵字個數至少為(2/3)*M,即塊的最低使用率為2/3(代替B+樹的1/2); 
B+樹的分裂:當一個結點滿時,分配一個新的結點,並將原結點中1/2的資料複製到新結點,最後在父結點中增加新結點的指標;B+樹的分裂隻影響原結點和父結點,而不會影響兄弟結點,所以它不需要指向兄弟的指標; 
B*樹的分裂:當一個結點滿時,如果它的下一個兄弟結點未滿,那麼將一部分資料移到兄弟結點中,再在原結點插入關鍵字,最後修改父結點中兄弟結點的關鍵字(因為兄弟結點的關鍵字範圍改變了);如果兄弟也滿了,則在原結點與兄弟結點之間增加新結點,並各複製1/3的資料到新結點,最後在父結點增加新結點的指標; 
所以,B*樹分配新結點的機率比B+樹要低,空間使用率更高; 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.