MySQL中Hash和B-Tree有什么区别
MySQL Hash索引结构的特殊性在于它的检索效率非常高。索引检索可以一次性定位,不像B-Tree索引需要从根节点到分支节点,最后访问页节点。 IO 访问次数,因此 Hash 索引的查询效率远高于 B-Tree 索引。
很多人可能又产生疑问了。既然Hash索引的效率比B-Tree高很多,那为什么大家不都用Hash索引还要用B-Tree索引呢?一切都有它自己的问题。它有两个方面,哈希索引也是如此。虽然Hash索引效率很高,但是Hash索引本身也带来了很多限制由于其特殊性,存在一些缺点和不足,主要有以下几个方面。
(1) MySQL Hash索引只能满足“=”、“IN”和“<=>”查询,不能使用范围查询。
由于MySQL Hash索引是比较Hash运算后的Hash值,所以只能用于等值过滤,不能用于基于范围的过滤,因为对应的Hash后算法处理后的Hash值的大小关系不保证与Hash运算前完全相同。
(2)MySQL不能使用Hash索引来避免数据排序操作。
由于MySQL Hash索引存储的是Hash计算后的Hash值,而Hash值的大小关系不一定与Hash运算前的键值完全一致,所以索引数据无法使用避免任何排序操作;
(3)MySQL Hash索引不能使用部分索引键进行查询。
对于组合索引,在计算Hash索引的Hash值时,将组合索引键进行合并,然后一起计算Hash值,而不是单独计算Hash值,因此组合索引的前一个或前几个索引键为使用 执行查询时,不能使用Hash索引。
(4) MySQL Hash索引任何时候都无法避免表扫描。
前面我们知道,哈希索引是对索引键进行哈希运算后的结果。哈希值和对应的行指针信息存储在哈希表中。由于不同的索引键中存在相同的Hash值,即使获取到满足某个Hash键值的记录条数,也无法直接从Hash索引完成查询。 ,仍然需要通过访问表中的实际数据进行相应的比较,得到相应的结果。
(5) MySQL Hash索引的性能不会当遇到大量相等的哈希值时,必然高于B-Tree索引。
对于选择性较低的索引键,如果创建Hash索引,将会有大量的记录指针信息与同一个Hash值关联。这样,定位某条记录会非常麻烦,而且会浪费对表数据的多次访问,导致整体性能低下。
阅读以上内容对您有帮助吗?如果您想了解更多相关知识或阅读更多相关文章,请关注行业资讯频道。感谢您的支持。
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > MySQL中Hash和B-Tree有什么区别