1、B+Tree索引

1、B+Tree首先是有序結構,為了不至於樹的高度太高,影響查找效率,在葉子節點上存儲的不是單個數據,提高了查找效率; 為了更好的支持范圍查詢,B+樹在葉子節點冗余了非葉子節點數據,為了支持翻頁,葉子節點之間通過指針相連; 2、B+樹算法: 通過繼承了B樹的特征,通過非葉子節點查詢葉子節點獲取對應的value,所有相鄰的葉子節點包含非葉子節點,使用鏈表進行結合,有一定順序排序,從而范圍查詢效率非常高。 缺點:因為有冗余節點數據,會比較占內存。
2、Hash索引
’

1、Hash是k,v形式,通過一個散列函數,能夠根據key快速找到value 2、哈希索引就是采用一定的hash算法,把鍵值換成新的哈希值,檢索時不需要類似B+樹那樣從根節點到葉子節點逐級查找,只需要一次hash算法即可立即定位到相應的位置,速度非常快。 缺點: 因為底層數據結構是散列的,無法進行比較大小,不能進行范圍查找
3、B+樹索引和hash索引的明顯區別:
1、如果是等值查詢,那么hash索引有明顯的優勢,因為只需要經過一次算法即可找到相應的鍵值;當然了,這個鍵值是唯一的,如果不唯一,則需要先找到下標位置再鏈式查找。 2、從示意圖可以知道,hash索引無法支持范圍查詢,因為原先是有序的鍵值,但是經過hash算法后,有可能變成不連續的,就沒有辦法利用索引完成范圍查詢檢索數據。 3、同樣,hash索引也沒辦法利用索引完成排序,以及like `xxx%`這樣的模糊查詢(范圍查詢)。 4、hash索引也不支持多列聯合索引的最左前綴匹配規則。 5、B+樹索引的關鍵字檢索效率比較平均,不像B樹那樣波動幅度大,在有大量重復鍵的情況下,hash索引的效率也是極低的,因為存在hash碰撞問題。