BTREE索引和HASH索引

2017/07/23 21:41
阅读数 20

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';

BTREE索引和HASH索引

默认hash索引

BTREE索引和HASH索引

创建memory表

这边创建了存储引擎为memory的表,可以从第一张表看到默认的表索引是HASH,所以在查询的时候,默认的type就是全文搜索了。

BTREE索引和HASH索引

BTREE索引

如果是BTREE索引那么可以通过索引访问。

BTREE索引和HASH索引

范围搜索

在使用索引的时候需要注意MEMORY表时,要注意sql的写法。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部