Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 的用法 » 查询处理 » 查询优化与执行 » [查询执行] 算法 » 算法类型 » 其它算法

 

散列过滤器算法(HF、HFP)

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

例如,计划为:

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

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

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

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

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

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