2021-01-28
阅读量:
287
哈希索引和B树索引的区别
首先看hash索引:
1.只能使用=或<=>操作符的等式比较
2.优化器不能使用hash索引来加速order by操作
3.mysql不能确定在两个值之间大约有多少行。如果将一个myisam表改为hash索引的memory表,会影响一些查询的执行效率。
4.只能使用整个关键字来搜索一行。
而对于B树索引,<,>=,between,like 'pattern'(其中pattern不以通配符开始),之类的,都可以使用相关列上的索引。
然后这一切都是由于在数据结构上的差异。B树由于本身就是演化于二叉查找树,所以数据的存储本来就是有顺序的。所以在进行范围查询时就有很大的优势,数据都帮你排序好了,选边界啥的还不简单嘛。而反观hash索引,它的hash算法是为了尽量减少冲突而产生的,所以它并不适合进行范围查询的操作,但如果是单个查询的话,由于hashmap的时间复杂度是一,所以就特别快。
然后大家可以用explain查看一下在两种索引的情况下分别进行范围查询,可以发现B树索引下会使用索引,而hash索引实际上使用的是全表扫描,建立起来的索引并没有使用。
然后,可以理解比如最左前缀原则啥的在hash索引下更实用不了了。
所以总的来说,我们大部分情况下使用的都是B树索引,hash索引是极少数才会使用到的。






评论(0)


暂无数据
推荐帖子
0条评论
0条评论
0条评论