数据库-优化索引-hash索引 BitMap索引

Hash索引

有的数据库存储引擎还支持hash这种数据结构作为其索引,理论上hash索引的索引效率理论上要高于B+树索引

 Hash索引的缺点

  • 仅仅能满足“=”,“in”,不能使用范围查询

由于hash索引比较的是hash运算之后的hash值,所以只能用于等值的过滤,不能用于基于范围的查询,因为经过相应的hash算法处理之后的hash值的大小关系并不能保证与hash运算前的完全一样,比如上图中的John Smith 和 Sandra Dee都是相同的hash值并不代表他们相同的大小

  • 无法被用来避免数据的排序操作

由于hash索引存储的是经过hash运算之后的值,而且hash值的大小关系并不会和hash运算前的键值完全一样,所以数据库无法利用索引的数据来避免任何的排序运算

  • 不能利用部分索引键查询

对于组合索引,hash索引在计算hash值的时候,是将组合索引键合并之后在一起进行运算的hash值,而不是单独计算hash值的,索引通过组合索引的前面一个或者几个索引键进行查询的时候,hash索引也无法被利用,而B=树是支持用组合索引中的部分索引的

  • 不能避免表扫描

hash索引是将索引键通过hash运算将运算结果的hash值和所对应的行指针信息存放在一个bucket中的,由于不同的索引键存在相同的hash值,所以即使取出满意那些hash键值的那些数据,也无法从hash索引中直接完成查询,还是要通过访问这个bucket中的实际数据进行相应的比较,所以这个是不能屏蔽表扫描的原因了

  • 遇到大量hash值相等的情况后性能并不一定会比B-Tree索引高

BitMap索引(位图索引)

当表中的某个字段只有几种值的时候 ,就比如我们要表示性别(男,女),如果只是在这个字段上进行简单的统计,因此用位图索引是一个很好的选择,不过目前很少的数据库支持位图索引,已知的是Oracle数据库,位图的数据结构类似于B+树,B+树用来定位叶子节点,这些节点包含指定键值的位图段,位图段就位于叶子节点上

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值