1. 程式人生 > >MySQL(三)索引----BTREE 索引與 HASH 索引

MySQL(三)索引----BTREE 索引與 HASH 索引

MEMORY 儲存引擎的表可以選擇使用 BTREE 索引或者 HASH 索引,兩種不同型別的索引
各有其不同的適用範圍。HASH 索引有一些重要的特徵需要在使用的時候特別注意,如下所

  1. 只用於使用=或<=>操作符的等式比較。(=跟<=>的區別,主要是,<=>可以與null比較,null=null為null,而null<=>null,為true)
  2.  優化器不能使用 HASH 索引來加速 ORDER BY 操作。
  3.  MySQL 不能確定在兩個值之間大約有多少行。如果將一個 MyISAM 表改為 HASH 索
  4. 引的 MEMORY 表,會影響一些查詢的執行效率。
  5. 只能使用整個關鍵字來搜尋一行。

而對於 BTREE 索引,當使用>、<、>=、<=、BETWEEN、!=或者<>,或者 LIKE 'pattern'(其
中'pattern'不以萬用字元開始)操作符時,都可以使用相關列上的索引。

 下列範圍查詢適用於 BTREE 索引和 HASH 索引(in查詢):

SELECT * FROM t1 WHERE key_col = 1 OR key_col IN (15,18,20);

下列範圍查詢只適用於 BTREE 索引:

SELECT * FROM t1 WHERE key_col > 1 AND key_col < 10;
SELECT * FROM t1 WHERE key_col LIKE 'ab%' OR key_col BETWEEN 'lisa' AND 'simon';