天天看點

MySQL之哈希索引1 哈希索引概念2 哈希索引的優點3 哈希索引的缺點

文章目錄

  • 1 哈希索引概念
  • 2 哈希索引的優點
  • 3 哈希索引的缺點

1 哈希索引概念

  哈希索引(hash index)基于哈希表實作,隻有精确比對索引所有列的查詢才有效。對于每一行資料,存儲引擎都會對所有的索引列計算一個哈希碼(hash code),哈希碼是一個較小的值,并且不同鍵值的行計算出來的哈希碼也不一樣。哈希索引将所有的哈希碼存儲在索引中,同時在哈希表中儲存指向每個資料行的指針。在MySQL中,隻有MEMORY存儲引擎顯式支援哈希索引。

2 哈希索引的優點

  哈希索引自身隻需存儲行對應的hash值以及指向資料行的指針,是以索引的結構十分緊湊,這讓哈希索引查找的速度非常快。

3 哈希索引的缺點

  哈希索引也存在很多缺點,比如:

  • 哈希索引隻包含哈希值和行指針,而不存儲字段值,是以無法使用覆寫索引。
  • 哈希索引資料并不是按照索引值順序存儲的,是以無法進行排序。
  • 哈希索引不支援部分列比對查找,哈希索引是使用索引列的全部内容來計算哈希值。
  • 哈希索引隻支援等值比較查詢,不支援任何範圍查詢。
  • 當出現哈希沖突的時候,存儲引擎必須周遊連結清單中的所有行指針,逐行進行比較,直到找到所有符合條件的行。解決哈希沖突的方法有很多,如鍊位址法、再哈希法、開放定址法、建立公共溢出區。
  • 哈希沖突比較多的時候,維護的代價也會很高。

繼續閱讀