在Oracle中,BITMAP MERGE和BITMAP OR有什么区别?

奥拉马斯

查看文档时,我发现BITMAP MERGE在位图之间执行OR操作。那么,为什么还有一个BITMAP OR?或者,它们之间有什么区别?

最好的

马修·麦克佩克(Matthew McPeak)

它们非常相似,这是事实。

BITMAP MERGE返回多个位图单个计划操作中获取输出(例如,RANGE SCAN操作的输出),并将这些多个位图合并为一个。

例如,假设我提交:

SELECT 'x'
FROM   t
WHERE  col1 BETWEEN 'A' and 'C'
AND    col2 = 'X';

请记住,在位图索引中,有一个与每个key关联的位图这些是必须合并的多个位图。该计划将如下所示:

SELECT STATEMENT
  TABLE ACCESS T BY INDEX ROWID
    BITMAP CONVERSION TO ROWID
      BITMAP AND
        BITMAP MERGE
          BITMAP INDEX COL1_IDX RANGE SCAN
        BITMAP INDEX COL2_IDX SINGLE VALUE

... 或多或少

在这种情况下,Oracle将扫描位图索引COL1以获取“ A”和“ C”之间的不同索引键值。然后,它读取与每个值关联的位图的索引,并通过将它们合并在一起OR

注意:COL2 = 'X'上面示例中的原因是因为我认为Oracle仅在BITMAP MERGE需要生成单个位图以传递到需要一个父步骤(在此示例中,该步骤为BITMAP AND步骤)的情况下才使用。

将其与BITMAP OR计划步骤进行对比BITMAP OR两个计划操作获取输出每个计划操作输出一个位图。它将那些合并为一个位图。

假设我提交:

SELECT 'x'
FROM   t
WHERE  col1 = 'A'
OR     col2 = 123;

Oracle必须从访问路径开始-一种使用索引获取其所需数据的方法。
在这种情况下,访问路径将是BITMAP INDEX ... SINGLE VALUE对与COL1相关联的索引操作COL2然后它将BITMAP OR用于合并这两个访问路径的结果。该计划将如下所示:

SELECT STATEMENT
  TABLE ACCESS T BY INDEX ROWID
    BITMAP CONVERSION TO ROWID
      BITMAP OR
        BITMAP INDEX COL1_IDX SINGLE VALUE
        BITMAP INDEX COL2_IDX SINGLE VALUE

...或多或少(我实际上并未对此进行测试-我只是在传达我的理解)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章