什麼是B 樹索引,什麼是B 樹索引

時間 2021-06-13 06:39:22

1樓:

b+樹是一種樹資料結構,常見於資料庫與檔案系統之中。b+樹能夠使資料保持有序,並擁有均勻的對數處理時間的插入和刪除動作。b樹的元素通常會自底向上插入,有別於多數自頂向下插入的二叉樹。

b+ 樹在節點訪問時間遠遠超過節點內部訪問時間的時候,比可作為替代的實現有著實在的優勢。這通常在多數節點在次級儲存比如硬碟中的時候出現。通過最大化在每個內部節點內的子節點的數目減少樹的高度,平衡操作不經常發生,而且效率增加了。

這種價值得以確立通常需要每個節點在次級儲存中佔據完整的磁碟塊或近似的大小。

b+ 背後的想法是內部節點可以有在預定範圍內的可變數目的子節點。因此,b+ 樹不需要象其他自平衡二叉查詢樹那樣經常的重新平衡。對於特定的實現在子節點數目上的低和高邊界是固定的。

例如,在 2-3 b 樹(常簡稱為2-3 樹)中,每個內部節點只可能有 2 或 3 個子節點。如果節點有無效數目的子節點則被當作處於違規狀態。

b+ 樹的創造者 rudolf bayer 沒有解釋b代表什麼。最常見的觀點是b代表平衡(balanced),因為所有在葉子節點在樹中都在相同的級別上。b也可能代表bayer,或者是波音(boeing),因為他曾經工作于波音科學研究實驗室。

目錄 [隱藏]

1 節點結構

2 演算法

2.1 查詢

2.2 插入

2.3 刪除

3 註解

4 參見

5 外部連結

[編輯] 節點結構

在 b+ 樹中的節點通常被表示為一組有序的元素和子指標。除了根之外的每個節點都包含最少 l 個元素最多 u 個元素,對於任意的 l 和 u 有最多 u+1 個子指標。對於所有內部節點,子指標的數目總是比元素的數目多一個。

因為所有葉子都在相同的高度上,節點通常不包含確定它們是葉子還是內部節點的方式。

每個內部節點的元素充當分開它的子樹的分離值。例如,如果內部節點有三個子節點(或子樹)則它必須有兩個分離值或元素 a1 和 a2。在最左子樹中所有的值都小於 a1,在中間子樹中所有的值都在 a1 和 a2 之間,而在最右子樹中所有的值都大於 a2。

[編輯] 演算法

[編輯] 查詢

查詢以典型的方式進行,類似於二叉查詢樹。起始於根節點,自頂向下遍歷樹,選擇其分離值在要查詢值的任意一邊的子指標。在節點內部典型的使用二分查詢來確定這個位置。

[編輯] 插入

節點要處於違規狀態,它必須包含在可接受範圍之外數目的元素。

首先,查詢要插入其中的節點的位置。接著把值插入這個節點中。

如果沒有節點處於違規狀態則處理結束。

如果某個節點有過多元素,則把它**為兩個節點,每個都有最小數目的元素。在樹上遞迴向上繼續這個處理直到到達根節點,如果根節點被**,則建立一個新根節點。為了使它工作,元素的最小和最大數目典型的必須選擇為使最小數不大於最大數的一半。

[編輯] 刪除

首先,查詢要刪除的值。接著從包含它的節點中刪除這個值。

如果沒有節點處於違規狀態則處理結束。

如果節點處於違規狀態則有兩種可能情況:

它的兄弟節點,就是同一個父節點的子節點,可以把一個或多個它的子節點轉移到當前節點,而把它返回為合法狀態。如果是這樣,在更改父節點和兩個兄弟節點的分離值之後處理結束。

它的兄弟節點由於處在低邊界上而沒有額外的子節點。在這種情況下把兩個兄弟節點合併到一個單一的節點中,而且我們遞迴到父節點上,因為它被刪除了一個子節點。持續這個處理直到當前節點是合法狀態或者到達根節點,在其上根節點的子節點被合併而且合併後的節點成為新的根節點。

[編輯] 註解

假定 l 是節點允許擁有子節點的最小數目,而 u 是最大數目。則每個節點總是有在 l 和 u 之間(包含它們在內)個子節點,除了一個例外: 根節點有從2到u(包含它們在內)個子節點。

換句話說,根節點豁免於低邊界限制,而擁有它自己的低邊界2。這允許樹持有小數目的元素。根有一個子節點沒有意義,因為附著在這個子節點上的子樹可以簡單的附著在根節點上。

允許根節點沒有子節點也是不需要的,因為沒有元素的樹典型的表示為沒有根節點。

b+樹索引是什麼?

2樓:厲害炮彈不虛發

先從資料結構的角度來答。題主應該知道b-樹和b+樹最重要的一個區別就是b+樹只有葉節點存放資料,其餘節點用來索引,而b-樹是每個索引節點都會有data域。這就決定了b+樹更適合用來儲存外部資料,也就是所謂的磁碟資料。

從mysql(inoodb)的角度來看,b+樹是用來充當索引的,一般來說索引非常大,尤其是關係性資料庫這種資料量大的索引能達到億級別,所以為了減少記憶體的佔用,索引也會被儲存在磁碟上。那麼mysql如何衡量查詢效率呢?磁碟io次數,b-樹(b類樹)的特定就是每層節點數目非常多,層數很少,目的就是為了就少磁碟io次數,當查詢資料的時候,最好的情況就是很快找到目標索引,然後讀取資料,使用b+樹就能很好的完成這個目的,但是b-樹的每個節點都有data域(指標),這無疑增大了節點大小,說白了增加了磁碟io次數(磁碟io一次讀出的資料量大小是固定的,單個資料變大,每次讀出的就少,io次數增多,一次io多耗時啊!

),而b+樹除了葉子節點其它節點並不儲存資料,節點小,磁碟io次數就少。這是優點之一。另一個優點是什麼,b+樹所有的data域在葉子節點,一般來說都會進行一個優化,就是將所有的葉子節點用指標串起來。

這樣遍歷葉子節點就能獲得全部資料,這樣就能進行區間訪問啦。至於mongodb為什麼使用b-樹而不是b+樹,可以從它的設計角度來考慮,它並不是傳統的關係性資料庫,而是以json格式作為儲存的nosql,目的就是高效能,高可用,易擴充套件。首先它擺脫了關係模型,上面所述的優點2需求就沒那麼強烈了,其次mysql由於使用b+樹,資料都在葉節點上,每次查詢都需要訪問到葉節點,而mongodb使用b-樹,所有節點都有data域,只要找到指定索引就可以進行訪問,無疑單次查詢平均快於mysql(但側面來看mysql至少平均查詢耗時差不多)。

總體來說,mysql選用b+樹和mongodb選用b-樹還是以自己的需求來選擇的。

什麼是b2b公司,什麼是B2B公司?

有人說策略 b2b 是指企業對企業之間的營銷關係 一般就是批發業務。他做的是類似阿里巴巴平臺這類電子商務平臺。提供一個平臺讓客戶在上面交易商品 謝謝大忙人 btb,是business to business 的縮寫,是指企業對企業之間的營銷關係,它將企業內部網,通過 b2b 與客戶緊密結合起來,通過...

什麼是a套,什麼是b套,什麼是A套,什麼是B套

爺呮手遮天 1 a套b套是版本不同的書,必修代表必須要學的,選修代表選擇性的學習,高考考選修的內容,不過分值通常不大。2 ab套就是兩個版本的課程,但是總體內容應該差別不大。必修課就是必須要學習的課程,選修的話就是不用深究的課程,很少考到選修課程上的吧,語文默寫那道題偶爾會有選修課上的名句。3 半成...

什麼是A股,什麼是B股,什麼是A股和B股?

a股即人民幣普通股,是由中國境內公司發行,供境內機構 組織或個人以人民幣認購和交易的普通股 b股的正式名稱是人民幣特種 它是以人民幣標明面值,以外幣認購和買賣,在境內 上海 深圳 交易所上市交易的 a股也稱為人民幣普通 流通股 社會公眾股 普通股。是指那些在中國大陸註冊 在中國大陸上市的普通 以人民...