mysql索引 B Tree和Hash的區別

2021-09-24 19:34:41 字數 784 閱讀 1799

在mysql裡常用的索引資料結構有b+樹索引和雜湊索引兩種,我們來看下這兩種索引資料結構的區別及其不同的應用建議。

b+樹是乙個平衡的多叉樹,從根節點到每個葉子節點的高度差值不超過1,而且同層級的節點間有指標相互鏈結。

在b+樹上的常規檢索,從根節點到葉子節點的搜尋效率基本相當,不會出現大幅波動,而且基於索引的順序掃瞄時,也可以利用雙向指標快速左右移動,效率非常高。

簡單地說,雜湊索引就是採用一定的雜湊演算法,把鍵值換算成新的雜湊值,檢索時不需要類似b+樹那樣從根節點到葉子節點逐級查詢,只需一次雜湊演算法即可立刻定位到相應的位置,速度非常快。

從上面的圖來看,b+樹索引和雜湊索引的明顯區別是:

在mysql中,只有heap/memory引擎表才能顯式支援雜湊索引(ndb也支援,但這個不常用),innodb引擎的自適應雜湊索引(adaptive hash index)不在此列,因為這不是建立索引時可指定的。

還需要注意到:heap/memory引擎表在mysql例項重啟後,資料會丟失。

通常,b+樹索引結構適用於絕大多數場景,像下面這種場景用雜湊索引才更有優勢:

在heap表中,如果儲存的資料重複度很低(也就是說基數很大),對該列資料以等值查詢為主,沒有範圍查詢、沒有排序的時候,特別適合採用雜湊索引

例如這種sql:

select … from t where c1 = ?; — 僅等值查詢

在大多數場景下,都會有範圍查詢、排序、分組等查詢特徵,用b+樹索引就可以了。

MySQL的btree索引和hash索引的區別

hash 索引結構的特殊性,其檢索效率非常高,索引的檢索可以一次定位,不像b tree 索引需要從根節點到枝節點,最後才能訪問到頁節點這樣多次的io訪問,所以 hash 索引的查詢效率要遠高於 b tree 索引。可 能很多人又有疑問了,既然 hash 索引的效率要比 b tree 高很多,為什麼大...

MySQL的btree索引和hash索引的區別

hash 索引結構的特殊性,其檢索效率非常高,索引的檢索可以一次定位,不像b tree索引需要從根節點到枝節點,最後才能訪問到頁節點這樣多次的io訪問,所以 hash 索引的查詢效率要遠高於 b tree索引。可能很多人又有疑問了,既然hash 索引的效率要比 b tree 高很多,為什麼大家不都用...

MySQL的btree索引和hash索引的區別

原文 hash 索引結構的特殊性,其檢索效率非常高,索引的檢索可以一次定位,不像b tree 索引需要從根節點到枝節點,最後才能訪問到頁節點這樣多次的io訪問,所以hash 索引的查詢效率要遠高於 b tree 索引。可 能很多人又有疑問了,既然 hash 索引的效率要比 b tree 高很多,為什...