Oracle:为什么不使用并行执行?

时间:2012-03-15 16:31:24

标签: sql oracle parallel-processing

查看以下查询: 如果我评论子查询它使用并行执行,否则它不会。

查询后

SELECT  /*+ parallel(c, 20) */
      1, (SELECT 2 FROM DUAL)
  FROM DUAL c;

2 个答案:

答案 0 :(得分:6)

您可以找到答案in the documentation

  

只有在以下情况下才能并行化SELECT语句   条件得到满足:

     
      
  • 查询包含并行提示规范(PARALLEL或   PARALLEL_INDEX)或查询中引用的模式对象具有   与他们相关的PARALLEL声明。

  •   
  • 查询中指定的至少一个表需要其中一个   以下内容:

         
        
    • 全表扫描

    •   
    • 跨越多个分区的索引范围扫描

    •   
  •   
  • SELECT列表中没有标量子查询。

  •   

您的查询处于最后的障碍:它的投影中有一个标量子查询。如果要并行化查询,则需要找到另一种编写查询的方法。

答案 1 :(得分:1)

一个想法可能不是使用子查询,但您可以尝试使用连接?您的子查询看起来相当简单,没有分组等,因此将其转换为连接不应该是一个问题。

当存在子查询时,可能优化器无法并行执行。