并行化oracle查询

时间:2015-09-17 08:22:31

标签: sql oracle

我使用WITH,UNION和JOIN进行Oracle查询。如何并行化。

在此处编写示例查询:

 SELECT NAME, Id, Salary, Type 
   FROM
      ( WITH Emp as 
         ( 
           SELECT E.Name, E.Id, E.Salary 
             From EMPLOYEE E 
       INNER JOIN  SALARY S
               ON E.Id=S.Id
            WHERE E.SEX='M'
          )

      SELECT Name, Id, Salary, 'High Salary' as Type 
        FROM Emp
       WHERE Salary >= '50000'

   UNION ALL
      SELECT Name, Id, Salary, 'Average Salary' as Type 
        FROM Emp
       WHERE Salary >= '10000'AND Salary <= '50000'

   UNION ALL
      SELECT Name, Id, Salary, 'Low Salary' as Type 
        FROM Emp
       WHERE Salary >= '10000' 
         AND Salary <= '50000' 
    ) A

在我的原始查询中,我有大约4个要加入的表和10个UNION ALL语句。请建议将其并行化。

1 个答案:

答案 0 :(得分:0)

在11gR2中,这可能很容易:

SELECT /*+ parallel */ NAME, Id, Salary, Type ...

但正如大卫·阿尔德里奇所提到的,并行性可能是一个广泛的话题。这个答案假设您有一个长期运行的查询,可以从并行性,足够的资源,理智的配置,企业版等中受益。如果简单的方法不起作用,您将需要回来并发布完整的查询和解释计划。

对于特定的UNION ALL案例,此查询可能受益于Concurrent Execution of Union All,即12c中的新功能。虽然该功能似乎主要用于查询远程数据库。