Btree索引与hash索引的区别

在创建索引的时候需要选择索引类型是hash还是Btree,对于两种索引类型的区别一直存在疑惑,因此今天找了些资料解答一下自己。

Hash索引与Btree索引的区别:

  • hash索引:将索引键经过hash运算之后得出hash值和对应的行指针存放于一个hash表中。
    • 检索效率非常高,可以一次定位。
    • 仅能满足“=”、“in”、“<=>”三种查询,不能使用范围查询,不支持like查询
    • 不支持索引排序,索引值和计算出来的hash值大小不一定一致。
    • 无法使用部分组合索引,因为hash值是组合索引键合并后计算的值
    • 无法避免表扫描,无法从hash索引表中直接完成查询,需要访问表中的实际数据进行相应比较才得出相应结果。
    • 遇到大量hash值一致的情况,性能不一定比Btree索引。大量记录指针与同一个hash值相关联,定位某条记录需要多次表数据访问而造成性能低下。
  • Btree索引
    • 检索时需要经历「根节点->枝节点->叶节点」,多次IO访问。
    • 支持联合索引的最优前缀。
    • 支持like查询
    • 支持范围查询
    • 支持索引排序

  总而言之,不存在大量重复数据的精确查找,hash索引的效率要高于Btree索引。

参考:https://mp.weixin.qq.com/s/HsCMtgJnH11wKEZODjfNlg、https://blog.csdn.net/weixin_39683912/article/details/107459324

原文地址:https://www.cnblogs.com/smallzhen/p/14716312.html