查看文档时,我发现BITMAP MERGE在位图之间执行OR操作。那么,为什么还有一个BITMAP OR?或者,它们之间有什么区别?
最好的
它们非常相似,这是事实。
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] 删除。
我来说两句