Oracle - 在加入之前缓冲两个子类

时间:2013-05-22 16:43:09

标签: sql oracle subquery

我正在尝试做这样的事情:

SELECT * FROM 
(SUBQUERY A) A 
JOIN (SUBQUERY B) B 
ON A.FIELD = B.FIELD

单独地,A运行非常快(大约5秒),B运行大约15-20秒。 但是当我尝试进行此连接时,只需几分钟即可运行。 我知道查询为A的每一行运行B.这些subquerys涉及非常大的表,但返回少量的寄存器。

我想知道一种强制A和B单独运行的方法,然后缓冲结果,最后只在结果中运行连接查询

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以使用with子句 -

with a as ( subquery a),
b as (subquery B)
SELECT * FROM  A JOIN B 
ON A.FIELD = B.FIELD

答案 1 :(得分:0)

您可以使用NO_MERGE提示获得所需内容:

SELECT * FROM 
(SELECT /*+NO_MERGE*/ ... FROM SUBQUERY A) A 
JOIN (SELECT /*+NO_MERGE*/ ... FROM SUBQUERY B) B 
ON A.FIELD = B.FIELD