【问题标题】:Oracle Convert Select Union All to Parallel SelectOracle 将 Select Union All 转换为 Parallel Select
【发布时间】:2016-11-23 12:34:15
【问题描述】:

我不知道在 oracle 执行架构方面是否可能,所以我只是想问一下。
我有一个存储一些模式名称(例如 sch1、sch2、sch3 )的表,我正在使用该表在游标内动态创建一个联合所有查询。
所以例如。我的查询如下所示:

select col1, col2 from sch1.tab1
union all 
select col1, col2 from sch2.tab1
union all 
select col1, col2 from sch3.tab1

例如。如果我选择具有并行提示的表,例如

select /*+ parallel(tab,4)*/ * from tab

如果我没记错的话,它将打开 4 个会话并在一次执行中处理它。
那么可以用这种方法查询所有表吗?

【问题讨论】:

  • + 必须是注释中的第一个字符,如果它应被视为提示。做/*+ parallel(tab,4) */
  • @WernfriedDomscheit 看起来 OP 正在搜索 PQ_CONCURRENT_UNION

标签: oracle parallel-processing union-all query-hints


【解决方案1】:

您正在搜索Concurrent Execution of Union All

像 UNION 或 UNION ALL 这样的集合运算符由多个查询(分支)组合成一个 SQL 语句组成。 传统上,集合运算符是按顺序处理的。单个分支可以串行或并行处理,但一次只能处理一个分支,一个接一个。 虽然这种方法可以满足许多用例,但在某些情况下处理一个 UNION 或 UNION ALL 的多个分支语句应该同时发生。最典型的情况是当几个或所有分支都是远程 SQL 语句时。在这种情况下,希望在所有参与的远程系统上进行并发处理,以加快整体处理时间,而不会增加任何参与系统的工作量。

当 OPTIMIZER_FEATURES_ENABLE 初始化参数设置为小于 12.1 的值时,必须使用 PQ_CONCURRENT_UNION 提示显式启用 UNION 或 UNION ALL 语句的并发执行。

SELECT /*+ PQ_CONCURRENT_UNION(@"SET$1") */ * 
FROM (
  select col1, col2 from sch1.tab1
  union all 
  select col1, col2 from sch2.tab1
  union all 
  select col1, col2 from sch3.tab1
) a;

如果你OPTIMIZER_FEATURE_ENABLED 是 12.1+ 并且至少有一个分支被认为是并行处理的,你不需要做任何事情。

【讨论】:

    猜你喜欢
    • 2021-11-20
    • 2011-01-17
    • 1970-01-01
    • 1970-01-01
    • 2015-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多