MYSQL:基于哈希的索引和基于树的索引有什么区别?
B+树是一个平衡的多叉树。B+树从根节点到叶子节点的搜索效率基本相当,不会出现大幅波动。
哈希索引采用一定的哈希算法,把键值换成新的哈希值,检索时不需要类似B+树那样从根节点逐级查找,只需一次哈希算法即可立刻定位到相应的位置。
两者的区别:
1.hash索引仅满足“=”、“IN”和“<=>”查询,不能使用范围查询
(等值查询。哈希索引具有绝对优势(前提是:没有大量重复键值,如果大量重复键值时,哈希索引的效率很低,因为存在所谓的哈希碰撞问题。))
2.hash索引无法被用来进行数据的排序操作
3.对于组合索引,Hash 索引在计算 Hash 值的时候是组合索引键合并后再一起计算 Hash 值,而不是单独计算 Hash 值,所以通过组合索引的前面一个或几个索引键进行查询的时候,Hash 索引也无法被利用
4.Hash 索引遇到大量Hash值相等的情况后性能并不一定就会比B-Tree索引高