优化的位图过滤是如何实现的?

位图过滤器只有在具有选择性时才有用。查询优化器决定优化的位图过滤器何时具有足够的选择性以提供帮助以及过滤器用于哪些运算符。优化器字段优化位图过滤星形连接的所有部门,并使用成本计算规则来决定计划是否支持最小的估计实施成本。

当优化的位图过滤器是非选择性的时,成本估计通常太高并且计划被拒绝。当考虑在计划中放置优化位图过滤器的位置时,散列连接变体的优化器视图包括右深的散列连接堆栈。执行与维度表的联接以首先执行可能的最有选择性的联接。

使用优化位图过滤器的操作符在PROBE的设计中包含位图谓词([Opt_Bitmap1001], {[column_name]} [, 'IN ROW'])。位图谓词报告以下数据:

  • 位图名称与位图运算符中引入的名称相关。前缀“Opt_”表示使用了优化的位图过滤器。

  • 柱子探测到对面。这是过滤数据流经树的术语。

  • 位图探针是否需要行内优化。如果是,则使用 IN ROW 参数调用位图探测器。或者,缺少此参数。

优化位图过滤要求

优化位图过滤有以下要求 -

  • 事实表预计至少有 100 页。优化器将较小的表视为维度表。

  • 仅考虑事实表和维度表之间的内部联接。

  • 事实表和维度表之间的连接谓词应该是单列连接,但不需要是主键到外键的关系。选择基于整数的列。

  • 仅当维度输入基数小于事实表中的输入基数时,才会处理具有维度的连接。

位图过滤和优化位图过滤是通过使用位图显示计划操作符在查询计划中执行的。位图过滤仅在使用散列或合并连接的并行查询计划中使用。优化位图过滤仅与使用散列连接的并行查询计划相关。

在这两种情况下,位图过滤器都是在散列连接的构建输入(维度表)端生成的;但是,实际的过滤通常在 Parallelism 操作符内完成,它位于散列连接的探测输入(事实表)侧。当连接基于整数列时,过滤器可以直接用于原始表或索引的扫描操作,而不是并行操作符。这种技术称为行内优化。