MySQL索引方法BTREE与HASH的区别

​ 创建mysql索引的时候经常有两种选择:BTREE和HASH;两种索引区别很大。如下表格:

比较名称

HASH

BREE

备注

顺序

无序

有序

BTREE数据是有序的,而hash是没有顺序的。

效率

较低

理论上HASH查询效率较BTREE高。

索引排序

不支持

支持

HASH不支持排序,BTREE支持。

部分索引

不支持

支持

HASH不支持部分索引查询因为是无序的,而BTREE可以。

避免全表扫描

不支持

支持

HASH任何时候都无法避免全表扫描,而BTREE可以。

HASH的实现:hash是以key、value的形式存储,是通过hash索引计算出一个唯一的hash的key值,然后通过该key值进行全表匹配判断(组合索引也一样),查询出value值。这样的话虽然说效率很高,但是避免不了全表扫描,反而当数据量非常大的时候会导致哈希碰撞问题,性能就会比btree慢。

BTREE的实现:btree也称为b+树,主要的实现是通过一个平衡二叉树进行判断范围查询,btree的性能比较稳定,不会出现很大的波动,也不会出现hash的碰撞问题,基于索引的顺序扫描,也可以利用双向指针快速左右移动,效率非常高。

总结:btree适用于大部分的场景,并且也是非常实用,虽然说除了在少量数据(万级)场景下性能不如hash,但其它的特性与性能远超hash;所以在选择索引的时候需要考虑数据量与应用场景。

全部评论
万级数据中性能差距大吗
点赞 回复 分享
发布于 2023-02-22 21:45 山东
区别还真的很大
点赞 回复 分享
发布于 2023-02-22 21:18 山西

相关推荐

评论
2
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务