我使用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语句。请建议将其并行化。
答案 0 :(得分:0)
在11gR2中,这可能很容易:
SELECT /*+ parallel */ NAME, Id, Salary, Type ...
但正如大卫·阿尔德里奇所提到的,并行性可能是一个广泛的话题。这个答案假设您有一个长期运行的查询,可以从并行性,足够的资源,理智的配置,企业版等中受益。如果简单的方法不起作用,您将需要回来并发布完整的查询和解释计划。
对于特定的UNION ALL
案例,此查询可能受益于Concurrent Execution of Union All,即12c中的新功能。虽然该功能似乎主要用于查询远程数据库。