索引原理-btree索引與hash索引的區別

  btree索引與hash索引的區別,以前不清楚,mark一下。算法

  Hash索引結構的特殊性,其檢索效率很是高,索引的檢索能夠一次定位,不像B-Tree索引須要從根節點到枝節點,最後才能訪問到頁節點這樣屢次的IO訪問,因此Hash索引的查詢效率要遠高於B-Tree索引。數據庫

  可能不少人又有疑問了,既然Hash索引的效率要比B-Tree高不少,爲何你們都不用Hash索引而還要使用B-Tree索引呢?任何事物都是有兩面性的,Hash索引也同樣,雖然Hash索引效率高,可是Hash索引自己因爲其特殊性也帶來了不少限制和弊端,主要有如下這些:性能

  一、Hash索引僅僅可以知足「=」,「IN」和「<=>」查詢,不能使用範圍查詢。指針

  因爲Hash索引比較的是進行Hash運算以後的Hash值,因此它只能用於等值的過濾,不能用於基於範圍的過濾,由於進過相應的Hash算法處理以後的Hash值的大小關係,並不能保證和Hash運算前徹底同樣。排序

  二、Hash索引沒法被用來避免數據的排序操做索引

   因爲Hash索引中存放的是通過Hash計算以後的Hash值,並且Hash值的大小管理並不必定和Hash運算前的鍵值徹底同樣,因此數據庫沒法利用索引的數據來避免任何排序運算。hash

  三、Hash索引不能利用部分索引查詢效率

  對於組合索引,Hash索引在計算Hash值的時候是組合索引鍵合併後再一塊兒計算Hashs值,而不是單獨計算Hash值,因此經過組合索引的前面一個或者幾個索引鍵進行查詢的時候,Hash索引也沒法被利用。數據

  四、Hash索引在任什麼時候候都不能避免表掃描查詢

  前面已經知道,Hash索引是將索引鍵經過Hash運算以後,將Hash運算結果的Hash值和對應的行指針信息存放於一個Hash表中,因爲不一樣索引鍵存在相同Hash值,因此即便取知足某個Hash鍵值的數據的記錄條數,也沒法從Hash索引中年直接完成查詢,還要經過訪問表中實際數據進行相應的比較,並獲得相應的結果。

  五、Hash索引遇到大量Hash值相等的狀況後性能不必定會比B-Tree索引高

  對於選擇性比較低的索引鍵,若是建立Hash索引,那麼將會存在大量記錄指針信息存於同一個Hash值相關聯。這樣要定位某一條記錄時就會很是麻煩,會浪費屢次表數據的訪問,而形成總體性能低下。

相關文章
相關標籤/搜索