如何实现优化的位图筛选?
位图筛选只有在它具有选择性时才有效。查询优化器会决定优化后的位图筛选是否足够具有选择性以使其有帮助,以及该筛选器可以用于哪些运算符。优化器对星形连接的所有部门设定优化后的位图筛选,并使用成本规则来确定该计划是否支持最小的开销成本。
当优化后的位图筛选不具有选择性时,成本估算通常过高,并且该计划会被否决。在考虑在计划中放置优化后的位图筛选时,优化器关于哈希连接变量的视图包括一个哈希连接的右侧深度栈。连接维度表的目的是首先执行可能具有最高选择性的连接。
其中使用优化的位图筛选的运算符在 PROBE([Opt_Bitmap1001], {[column_name]} [, ‘IN ROW’]) 的设计中包括位图谓词。位图谓词报告以下数据
关联到位图运算符中引入名称的位图名称。前缀“Opt_”表示使用了优化的位图筛选。
相反探测的列。这是经过树的过滤数据流经的术语。
位图探测是否需要行内优化。如果是,则在调用位图探测时会启用 IN ROW 参数。而当不是时,则此参数不存在。
优化的位图筛选要求
优化的位图筛选具有以下要求 -
预计事实表拥有至少 100 页。优化器会将较小的表视为维度表。
仅考虑事实表和维度表之间的内部连接。
事实表和维度表之间的连接谓词应是单列连接,但不要求是主键到外键的关系。已选择一个基于整数的列。
只有当维度输入基数小于来自事实表的输入基数时,才处理与维度的连接。
通过使用位图显示计划操作员在查询计划中执行位图筛选和优化位图筛选。只有使用哈希或合并连接的并行查询计划中才使用位图筛选。优化后的位图筛选仅与使用哈希连接的并行查询计划相关。
在这两种情况下,位图筛选器都会在哈希连接的构建输入(维度表)端生成;但是,实际筛选通常在并行操作符中完成,该操作符位于哈希连接的探测输入(事实表)端上。当连接基于整数列时,可以将筛选器直接用于原始表或索引扫描操作,而不是并行操作符。此技术称为行内优化。
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP