散列过滤器算法(HF)

散列过滤器(有时称为 bloom 过滤器)是一种表示列或列集中值的分布的数据结构。散列过滤器可被视为(长)位字符串,其中 1 位指示存在某一特定行,而 0 位指示在此位的位置缺少任何行。通过将一组行中的值散列到过滤器的各个位的位置,数据库服务器可以确定是否存在与该值匹配的行(可能存在散列冲突)。

R<idx> *JH S<seq> JH* T<idx>


此处,将 R 连接到 S 和 T。数据库服务器先读取 R 的所有行,然后再从 T 读取任意行。如果散列过滤器是使用由索引扫描返回的 R 中的行构建的,则数据库服务器可以立即拒绝可能无法与 R 连接的 T 中的行。这将减少必须存储在第二个散列连接中的行数。

散列过滤器可以在同时满足以下条件的查询中使用:

  • 查询中的操作在向以后的操作返回行之前会读取它的整个输入。例如,某一列上两个表的散列连接需要从其中的一个输入读取所有相关行,以构成连接的散列表。

  • 查询访问计划中的后续操作会引用该操作结果中的行。例如,第一个连接所在列上的另一个连接只使用满足第一个连接的那些行。

在这种情况下,作为第一个连接的结果构建的散列过滤器可显著地提高第二个连接的性能。其实现方法是:在散列过滤器的位字符串中执行后备查询操作,以确定第一个连接是否先前已成功处理过某行—如果不存在这样的行,则可完全避免为第二个连接进行散列表探测,因为散列过滤器中不存在 1 位即表示探测将无法产生匹配项。



转载于:https://my.oschina.net/zzw922cn/blog/485039

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值