MySQL 索引結構 hash 有序陣列
除了最常見的樹形索引結構,Hash索引也有它的獨到之處,
Hash演算法
-
Hash本身是一種函式,又被稱為散列函式,
-
它的思路很簡單:將key放在陣列里,用一個hash演算法把不同的key轉換成一個確定的value,然后放在這個陣列的指定位置
相同的輸入永遠可以得到相同的輸出
-
具體的演算法有MD5、SHA1、SHA2、SHA3
-
Hash沖突:不同的key得到了相同的value
當出現Hash沖突,可以在沖突發生的位置跟一個鏈表
Hash索引
索引使用的資料結構的特性會讓索引也具有不同的特性:
-
Hash索引只適用于等值查詢的場景,區間查詢速度很慢
因為經過hash函式處理后,即便是原本有序的輸入,最后存放的位置也會變為無序的,
-
檢索速度很快
索引檢索一次到位,而不需要想B+樹那樣從根節點訪問到葉子節點,不過在有大量重復值得情況下,hash索引的效率極低,因為要頻發地處理Hash沖突,
-
無法完成排序,模糊查詢
因為它們本質上是范圍查詢
-
不支持多列聯合索引的最左匹配原則
對于Hash索引的聯合索引,是將聯合索引欄位值相捆綁然后計算Hash值的,無法利用對單一欄位的Hash值
Hash索引的用途:
-
Hash索引更多地使用在鍵值型的資料庫中,比如Redis
-
MySQL的Memory存盤引擎支持Hash存盤
如果我們需要用到查詢的臨時表時,就可以選擇 Memory 存盤引擎,把某個欄位設定為 Hash 索引,比如字串型別的欄位,進行 Hash 計算之后長度可以縮短到幾個位元組,當欄位的重復度低,而且經常需要進行等值查詢的時候,采用 Hash 索引是個不錯的選擇
-
InnoDB自適應Hash索引
當某個索引值使用非常頻繁的時候,它會在 B+ 樹索引的基礎上再創建一個 Hash 索引,這樣讓 B+ 樹也具備了 Hash 索引的優點,
有序陣列
如果我們使用有序資料作為索引結構的話,那么
- 等值查詢和范圍查詢的性能都十分優秀
- 但是插入和洗掉的成本太大
因此有序陣列的結構只適合靜態存盤引擎,如果我們要存盤以某種有序編號為序的不輕易增刪的歷史資料,我們可以使用有序陣列作為索引結構,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/16398.html
標籤:MySQL
上一篇:oracle安裝集群報錯
下一篇:MySQL基礎筆記
