b 樹
資料庫結構使用樹的結構索引,從演算法邏輯上看,二叉查詢樹的查詢速度和比較次數都是最小的。資料庫的索引儲存在磁碟上,當資料量比較大的時候,索引的大小可能有幾個g 甚至更多。
當我們利用索引查詢的時候,不可能把整個索引載入到記憶體,能做的只有逐一載入每乙個磁碟頁,磁碟頁對應索引樹的節點。
當利用二叉查詢樹時,每一層都是進行一次io操作(即把對應的索引裝入記憶體),因此最壞的情況下,磁碟的io次數就等於索引樹的高度。
為了減少io次數,就需要把層數降低,也就是b-樹
b樹是一種多路平衡查詢樹,每乙個節點最多包含k個孩子,k稱為b樹的階,k的大小取決於磁碟頁的大小,
m階b樹具有以下的特徵。
1.根結點至少有兩個子女。b + 樹2.每個中間節點都包含k-1個元素和k個孩子,其中 m/2 <= k <= m
3.每乙個葉子節點都包含k-1個元素,其中 m/2 <= k <= m
4.所有的葉子結點都位於同一層。
5.每個節點中的元素從小到大排列,節點當中k-1個元素正好是k個孩子包含的元素的值域分劃。
b+ 樹是b 樹的一種變體,比b樹的查詢效能更高。
1.有k個子樹的中間節點包含有k個元素(b樹中是k-1個元素),每個元素不儲存資料,只用來索引,所有資料都儲存在葉子節點。b+樹的好處主要體現在查詢效能上,單點查詢時,由於b+樹中間節點沒有資料,所有同樣的磁碟頁可以容納更多的節點,也就是說,在資料量相同的情況下,b+ 樹的結構比b樹更加矮胖,io次數也就更少。b+ 樹的查詢必須查到葉子節點,b樹查詢到匹配元素即可,所以b樹查詢效能不穩定。範圍查詢時,b 樹只能中序遍歷,而b+樹只需要在鍊錶中做遍歷即可。所以b+ 樹範圍查詢更加方便。所有的葉子結點中包含了全部元素的資訊,及指向含這些元素記錄的指標,且葉子結點本身依關鍵字的大小自小而大順序鏈結。
3.所有的中間節點元素都同時存在於子節點,在子節點元素中是最大(或最小)元素。
索引之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索引...