天天看點

mysql的hash索引和btree索引

mysql的hash索引和btree索引

hash 索引有着與剛才所讨論特點的相比截然不同的特點:

  • Hash 索引隻能夠用于使用 = 或者 <=> 運算符的相等比較(但是速度更快)。Hash 索引不能夠用于諸如 < 等用于查找一個範圍值的比較運算符。依賴于這種單值查找的系統被稱為 "鍵-值存儲";對于這種系統,盡可能地使用 hash 索引。
  • 優化器不能夠使用 hash 索引來加速 ORDER BY 操作。這種類型的索引不能夠用于按照順序查找下一個條目。
  • MySql 無法使用 hash 索引估計兩個值之間有多少行(這種情況由範圍優化器來決定使用哪個索引)。如果你将一張 MyISAM 或 InnoDB 表轉換成一個 hash 索引的記憶體表時,一些查詢可能會受此影響。
  • 查找某行記錄必須進行全鍵比對。而 B-tree 索引,任何該鍵的左字首都可用以查找記錄。

B-tree 索引可以用于使用 =, >, >=, <, <= 或者 BETWEEN 運算符的列比較。如果 LIKE 的參數是一個沒有以通配符起始的常量字元串的話也可以使用這種索引

hash 索引結構的特殊性,其檢索效率非常高,索引的檢索可以一次定位,不像B-Tree 索引需要從根節點到枝節點,最後才能通路到頁節點這樣多次的IO通路,是以 Hash 索引的查詢效率要遠高于 B-Tree 索引。

繼續閱讀