B樹與B 樹索引

2021-08-18 10:36:00 字數 1144 閱讀 2613

b 樹

資料庫結構使用樹的結構索引,從演算法邏輯上看,二叉查詢樹的查詢速度和比較次數都是最小的。資料庫的索引儲存在磁碟上,當資料量比較大的時候,索引的大小可能有幾個g 甚至更多。

當我們利用索引查詢的時候,不可能把整個索引載入到記憶體,能做的只有逐一載入每乙個磁碟頁,磁碟頁對應索引樹的節點。

當利用二叉查詢樹時,每一層都是進行一次io操作(即把對應的索引裝入記憶體),因此最壞的情況下,磁碟的io次數就等於索引樹的高度。

為了減少io次數,就需要把層數降低,也就是b-樹

b樹是一種多路平衡查詢樹,每乙個節點最多包含k個孩子,k稱為b樹的階,k的大小取決於磁碟頁的大小,

m階b樹具有以下的特徵。

1.根結點至少有兩個子女。

2.每個中間節點都包含k-1個元素和k個孩子,其中 m/2 <= k <= m

3.每乙個葉子節點都包含k-1個元素,其中 m/2 <= k <= m

4.所有的葉子結點都位於同一層。

5.每個節點中的元素從小到大排列,節點當中k-1個元素正好是k個孩子包含的元素的值域分劃。

b + 樹

b+ 樹是b 樹的一種變體,比b樹的查詢效能更高。

1.有k個子樹的中間節點包含有k個元素(b樹中是k-1個元素),每個元素不儲存資料,只用來索引,所有資料都儲存在葉子節點。

所有的葉子結點中包含了全部元素的資訊,及指向含這些元素記錄的指標,且葉子結點本身依關鍵字的大小自小而大順序鏈結。

3.所有的中間節點元素都同時存在於子節點,在子節點元素中是最大(或最小)元素。

b+樹的好處主要體現在查詢效能上,單點查詢時,由於b+樹中間節點沒有資料,所有同樣的磁碟頁可以容納更多的節點,也就是說,在資料量相同的情況下,b+ 樹的結構比b樹更加矮胖,io次數也就更少。b+ 樹的查詢必須查到葉子節點,b樹查詢到匹配元素即可,所以b樹查詢效能不穩定。範圍查詢時,b 樹只能中序遍歷,而b+樹只需要在鍊錶中做遍歷即可。所以b+ 樹範圍查詢更加方便。

索引之B樹 B 樹 B 樹 B 樹

原文索引之b樹 b 樹 b 樹 b 樹 b 樹即二叉搜尋樹 1.所有非葉子結點至多擁有兩個兒子 left 和right 2.所有結點儲存乙個關鍵字 3.非葉子結點的左指標指向小於其關鍵字的子樹,右指標指向大於其關鍵字的子樹 如 b樹的搜尋,從根結點開始,如果查詢的關鍵字與結點的關鍵字相等,那麼就命中...

索引之B樹 B 樹 B 樹 B 樹詳解

索引之b樹 b 樹 b 樹 b 樹 b樹 即二叉搜尋樹 1.所有非葉子結點至多擁有兩個兒子 left和right 2.所有結點儲存乙個關鍵字 3.非葉子結點的左指標指向小於其關鍵字的子樹,右指標指向大於其關鍵字的子樹 如 b樹的搜尋,從根結點開始,如果查詢的關鍵字與結點的關鍵字相等,那麼就命中 否則...

MySQL索引之B 樹與B 樹

本文只是個人閱讀筆記,原文建議詳細閱讀 什麼是b 樹 什麼是b 樹 我們知道mysql中索引最常用的資料結構就是hash和b tree,而其中的b 樹更是大多數 mysql 儲存引擎的預設索引型別。1 雜湊表 二叉查詢樹 b樹的比較要弄清楚b 樹,就得先知道b 樹 b 樹就是b樹 首先mysql索引...