Oracle: why doesn't use parallel execution?

2019-02-19 12:59发布

Look at the following query: If I comment the subquery it uses parallel execution otherwise it doesn't.

After the query has been

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

2条回答
Summer. ? 凉城
2楼-- · 2019-02-19 13:20

One Idea could be not to use a subquery, but you can try and use a join? Your sub query seems fairly simply, no grouping etc, so it should not be an issue to translate it into a join.

Maybe the optimizer is not capable of parallel execution when there are subqueries.

查看更多
▲ chillily
3楼-- · 2019-02-19 13:32

You could have found the answer in the documentation:

A SELECT statement can be parallelized only if the following conditions are satisfied:

  • The query includes a parallel hint specification (PARALLEL or PARALLEL_INDEX) or the schema objects referred to in the query have a PARALLEL declaration associated with them.

  • At least one of the tables specified in the query requires one of the following:

    • A full table scan

    • An index range scan spanning multiple partitions

  • No scalar subqueries are in the SELECT list.

Your query falls at the final hurdle: it has a scalar subquery in its projection. If you want to parallelize the query you need to find another way to write it.

查看更多
登录 后发表回答