MEMORY存储引擎的表可以选择使用BTREE所以或者HASH索引,两种不同类型的索引各有其不同的适用范围。HASH有一些重要的特征在使用的使用需要注意,比如:只用于使用=或<=>操作符的等式比较。优化器不能使用HASH索引来加速order by操作。Mysql不能确定在两个值之间大约有多少行,如果将一个MyISAM表改为HASH索引的MEMORY表,会影响一些查询的执行效率。只能使用整个挂件自来搜索一行。
而对于BTREE索引,当时有<、>、>=、<=、!=、between或者like 'pattern'(其中不以通配符开始)操作符时,都可以使用相关列上的索引
select * from t1 where key_col = 1 or key_col in(12,23,21);这个范围查询适用于BTREE索引和HASH索引
下面示例只适用于BTREE索引
select * from t1 where key_col >1 and key_col < 10;
select * from t1 where key_col like 'a%' or key_col between 'lili' and 'simon';
默认hash索引
创建memory表
这边创建了存储引擎为memory的表,可以从第一张表看到默认的表索引是HASH,所以在查询的时候,默认的type就是全文搜索了。
BTREE索引
如果是BTREE索引那么可以通过索引访问。
范围搜索
在使用索引的时候需要注意MEMORY表时,要注意sql的写法。