这些是来自 Oracle 文档的引用:
[可选] 通过组合两个聚合上下文进行合并并返回单个上下文。此操作组合子集上的聚合结果,以获得整个集合上的聚合。在“串行或并行”聚合评估期间可能需要此额外步骤。如果需要,可在步骤 4 之前执行:
,
在此类汇总操作中调用 ODCIAggregateMerge() 接口来计算超级聚合值。
原因是上下文的合并会消耗资源,并迫使我们使用与现在使用不同的数据结构,从而有效抵消并行执行带来的任何性能优势。我们有一个聚合函数,我们不想并行运行。
因此,我们
将我们的函数声明为parallel_enabled,而是在 ODCIAggregateMerge 中返回 ODCIconst.Error“以防万一”。 但是,第一个引用文档声称,即使在串行评估中也可能发生合并。
超级聚合(rollup、cube)是明显的例子,但是还有其他的吗?
我完全无法用简单的分组来重现它,如果没有parallel_enabled,合并永远不会被调用,而且似乎总是在组内创建一个上下文。
可以安全地假设如果没有parallel_enabled 设置,合并将永远不会运行吗?
您见过该规则的反例吗?