關係型資料庫中,索引大多採用b/b+樹來作為儲存結構,而全文搜尋引擎的索引則主要採用hash的儲存結構,這兩種資料結構有什麼區別?
hash結構的特點:檢索效率非常高,索引的檢索可以一次到位,o(1)。b樹需要從根節點到枝節點,最後才能到葉節點進行多次i/o操作,所以hash的效率遠遠高於b樹的效率。
那麼為什麼資料庫索引還是用b樹結構呢?
1、hash索引僅滿足「=」、「in」和「<=>」查詢,不能使用範圍查詢
因為hash索引比較的是經常hash運算之後的hash值,因此只能進行等值的過濾,不能基於範圍的查詢,因為經過hash演算法處理後的hash值的大小關係,並不能保證與處理前的hash大小關係對應。
2、hash索引無法被用來進行資料的排序操作
由於hash索引中存放的都是經過hash計算之後的值,而hash值的大小關係不一定與hash計算之前的值一樣,所以資料庫無法利用hash索引中的值進行排序操作。
3、對於組合索引,hash 索引在計算 hash 值的時候是組合索引鍵合併後再一起計算 hash 值,而不是單獨計算 hash 值,所以通過組合索引的前面乙個或幾個索引鍵進行查詢的時候,hash 索引也無法被利用。
4、hash 索引遇到大量hash值相等的情況後效能並不一定就會比b-tree索引高。
對於選擇性比較低的索引鍵,如果建立 hash 索引,那麼將會存在大量記錄指標資訊存於同乙個 hash 值相關聯。這樣要定位某一條記錄時就會非常麻煩,會浪費多次表資料的訪問,而造成整體效能低下。
(因此:鍵值重複率低的適合用b樹索引)
b-tree完全基於key的比較,和二叉樹相同的道理,相當於建個排序後的資料集,使用二分法查詢演算法,實際上也非常快,而且受資料量增長影響非常小。
Hash演算法應用場景
一.雜湊演算法的定義 1.雜湊演算法又叫雜湊演算法,是將任意長度的二進位制值對映為較短的固定長度的二進位制值,這個小的二進位制值稱為雜湊值。它的原理其實很簡單,就是把一段交易資訊轉換成乙個固定長度的字串。2.雜湊表是基於快速訪問的角度設計的,是一種典型的空間換時間的做法,二.從set map談到ha...
jQuery delegate 樹應用場景
delegate 方法為指定的元素 屬於被選元素的子元素 新增乙個或多個事件處理程式,並規定當這些事件發生時執行的函式。selector delegate childselector,event,data,function childselector 必需。規定要新增事件處理程式的乙個或多個子元素。...
hash型別的應用場景 Redis實戰經驗
hash型別是乙個string型別的field和value的對映表,每個 hash 可以儲存 232 1 鍵值對 40多億 hash型別主要有以下應用場景。1.購物車 以使用者id為key,商品id為field,商品數量為value,恰好構成了購物車的3個要素,如下圖所示。2.儲存物件 hash型別...