MEMORY 存储引擎的表可以选择使用 BTREE 索引或者 HASH 索引,两种不同类型的索引
各有其不同的适用范围。HASH 索引有一些重要的特征需要在使用的时候特别注意,如下所
示
- 只用于使用=或<=>操作符的等式比较。(=跟<=>的区别,主要是,<=>可以与null比较,null=null为null,而null<=>null,为true)
- 优化器不能使用 HASH 索引来加速 ORDER BY 操作。
- MySQL 不能确定在两个值之间大约有多少行。如果将一个 MyISAM 表改为 HASH 索
- 引的 MEMORY 表,会影响一些查询的执行效率。
- 只能使用整个关键字来搜索一行。
而对于 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';