查看以下查询: 如果我评论子查询它使用并行执行,否则它不会。
查询后
SELECT /*+ parallel(c, 20) */
1, (SELECT 2 FROM DUAL)
FROM DUAL c;
答案 0 :(得分:6)
您可以找到答案in the documentation:
只有在以下情况下才能并行化SELECT语句 条件得到满足:
查询包含并行提示规范(PARALLEL或 PARALLEL_INDEX)或查询中引用的模式对象具有 与他们相关的PARALLEL声明。
查询中指定的至少一个表需要其中一个 以下内容:
全表扫描
跨越多个分区的索引范围扫描
SELECT列表中没有标量子查询。
您的查询处于最后的障碍:它的投影中有一个标量子查询。如果要并行化查询,则需要找到另一种编写查询的方法。
答案 1 :(得分:1)
一个想法可能不是使用子查询,但您可以尝试使用连接?您的子查询看起来相当简单,没有分组等,因此将其转换为连接不应该是一个问题。
当存在子查询时,可能优化器无法并行执行。