資料庫索引 資料結構

2021-07-12 02:00:12 字數 1778 閱讀 6724

我們就來說一說其中的原因。

改進後的b+樹基於b+樹,b+樹又基於b樹,所以我們先從b樹談起

我們還是以person(id,name,age)這個例項來講訴b樹。

b樹是這樣的乙個資料結構:

d為大於1的乙個正整數,稱為b-tree的度。h為乙個正整數,稱為b-tree的高度。每個非葉子節點由n-1個key和n個指標組成,其中d<=n<=2d。每個葉子節點最少包含乙個key和兩個指標,最多包含2d-1個key和2d個指標,葉節點的指標均為null 。所有葉節點具有相同的深度,等於樹高h。

key和指標互相間隔,節點兩端是指標。

乙個節點中的key從左到右非遞減排列。

所有節點組成樹結構。

每個指標要麼為null,要麼指向另外乙個節點。

如果某個指標在節點node最左邊且不為null,則其指向節點的所有key小於v(key1),其中v(key1)為node的第乙個key的值。

如果某個指標在節點node最右邊且不為null,則其指向節點的所有key大於v(keym),其中v(keym)為node的最後乙個key的值。

如果某個指標在節點node的左右相鄰key分別是keyi和keyi+1且不為null,則其指向節點的所有key小於v(keyi+1)且大於v(keyi)。

如圖所示:

這是乙個度為2,key為id的b樹,b樹中的每個節點存放了一系列person。

根據id查詢乙個person的演算法複雜度為o(log[2]n)

可見,度越大的b樹儲存效率越高,在度為d的b樹種查詢的時間複雜度為o(log[d]n)遠小於二叉查詢樹

b樹有許多變種,最常見的就是b+樹,相比於前者,具有如下特點:

每個節點的指標上限為2d而不是2d+1。內節點不儲存data,只儲存key;葉子節點不儲存指標。

如下圖所示:

相比於b樹,b+樹的非葉節點僅僅儲存了key和對應的指標,所有的person都存放在葉子節點中。

至於為什麼使用b+樹而非b樹,因為b+樹更適合放在外部儲存(非記憶體)中實現,具體原因我們後面會講到

更高階的b+樹:

在普通b+樹的基礎上,對葉子節點進行指標相連。

原本查詢id為31和57的兩個person,需要從根節點遍歷到31所在節點一次,從根節點遍歷到57所在節點一次。在帶有順序訪問指標的節點b+樹種,找到31所在的節點後,只要順著節點和指標遍歷下去便可訪問到所需要的資料了,極大提高了區間查詢效率

資料庫索引使用的資料結構

說白了,索引問題就是乙個查詢問題。資料庫索引,是資料庫管理系統中乙個排序的資料結構,以協助快速查詢 更新資料庫表中資料。索引的實現通常使用b樹及其變種b 樹。在資料之外,資料庫系統還維護著滿足特定查詢演算法的資料結構,這些資料結構以某種方式引用 指向 資料,這樣就可以在這些資料結構上實現高階查詢演算...

資料庫之索引的資料結構

索引的資料結構主要有以下幾種 1 生成索引,建立二叉查詢樹 二叉排序樹 二叉搜尋樹進行二分查詢 2 平衡二叉樹,紅黑樹 3 生成索引,建立b tree b樹 b 樹 結構進行查詢 4 生成索引,建立b tree b 樹 結構進行查詢 5 生成索引,建立hash結構進行查詢 6 生成索引,建立位圖結構...

資料庫索引背後的資料結構

在資料之外,資料庫系統還維護著滿足特定查詢演算法的資料結構,這些資料結構以某種方式引用 指向 資料,這樣就可以在這些資料結構上實現高階查詢演算法。這種資料結構,就是索引。b tree是一種平衡的多路查詢 又稱排序 樹,在檔案系統中和資料庫系統中有所應用。主要用作檔案的索引。其中的b就表示平衡 bal...