MySQL的索引類型支持Hash嗎?

在設計表添加索引時,給了我兩個選項在這裏插入圖片描述
其實很多資料博客都會說hash索引和b+Tree的區別,但是一般沒有使用過hash索引本着對技術好奇的心態,想試試hash索引可不可以
什麼是hash結構索引呢?在查找了一些資料後可以瞭解到hash索引就是利用鍵的hash值來進行比較查找出數據。

因此對於那些值容易重複的列很不適用,會發生大量的hash碰撞,造成大量的性能消耗。

並且對於值需要比較的列,如創建時間這樣的需要範圍的查找也不適用,鍵在hash後也無法進行比較進行範圍查找。

在這裏插入圖片描述
上表來自官方文檔,可以看出MySQL是支持Hash索引,但是InnoDB和MyISAM並不支持。但是官方文檔又說

InnoDB採用自適用哈希索引技術,它會實時監控表上索引的使用情況,如果認爲建立哈希索引可以提高查詢效率,則自動在內存中的“自適應哈希索引緩衝區”

InnoDB官方文檔顯示,啓用自適應哈希索引後,讀和寫性能可以提高2倍,對於輔助索引的連接操作,性能可以提高5被,因此默認情況下爲開啓,我們可以通過參數innodb_adaptive_hash_index來禁用此特性。

那麼我這裏設置了hash索引會被使用嗎?

在這裏插入圖片描述在這裏插入圖片描述
system>const>eq_ref>ref>range>inex>ALL

查詢語句顯示被使用了,並且查詢級別是ref級別,根據查詢級別的排序表還是不錯的,所以innodb還是可以生效的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章