MySQL調優系列——MySQL B+Tree索引和Hash索引的區別?

一、B+Tree索引

一、B+Tree首先是有序結構,爲了避免至於樹的高度過高,影響查找效率,在葉子節點上存儲的不是單個數據,提升了查找效率;算法

爲了更好的支持範圍查詢,B+樹在葉子節點冗餘了非葉子節點數據,爲了支持翻頁,葉子節點之間經過指針相連;數據結構

二、B+樹算法: 經過繼承了B樹的特徵,經過非葉子節點查詢葉子節點獲取對應的value,全部相鄰的葉子節點包含非葉子節點,使用鏈表進行結合,有必定順序排序,從而範圍查詢效率很是高函數

缺點:由於有冗餘節點數據,會比較佔內存spa

二、Hash索引

.net

一、Hash是k,v形式,經過一個散列函數,可以根據key快速找到value指針

二、哈希索引就是採用必定的hash算法,把鍵值換成新的哈希值,檢索時不須要相似B+樹那樣從根節點到葉子節點逐級查找,只須要一次hash算法便可當即定位到相應的位置,速度很是快。blog

缺點: 由於底層數據結構是散列的,沒法進行比較大小,不能進行範圍查找排序

三、B+樹索引和hash索引的明顯區別:

一、若是是等值查詢,那麼hash索引有明顯的優點,由於只須要通過一次算法便可找到相應的鍵值;固然了,這個鍵值是惟一的,若是不惟一,則須要先找到下標位置再鏈式查找。繼承

二、從示意圖能夠知道,hash索引沒法支持範圍查詢,由於原先是有序的鍵值,可是通過hash算法後,有可能變成不連續的,就沒有辦法利用索引完成範圍查詢檢索數據。索引

三、一樣,hash索引也沒辦法利用索引完成排序,以及like `xxx%`這樣的模糊查詢(範圍查詢)。

四、hash索引也不支持多列聯合索引的最左前綴匹配規則。

五、B+樹索引的關鍵字檢索效率比較平均,不像B樹那樣波動幅度大,在有大量重複鍵的狀況下,hash索引的效率也是極低的,由於存在hash碰撞問題。

本文參考:

https://blog.csdn.net/n88Lpo/article/details/78099337?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

https://blog.csdn.net/LYTIT/article/details/89432379

相關文章
相關標籤/搜索