我正在尝试做这样的事情:
SELECT * FROM
(SUBQUERY A) A
JOIN (SUBQUERY B) B
ON A.FIELD = B.FIELD
单独来说,A 跑得非常快(大约 5 秒),B 跑大约 15 -20 秒。但是当我尝试进行此连接时,只需几分钟即可运行。我知道查询为 A 的每一行运行 B。这些子查询涉及非常大的表,但返回少量寄存器。
我想知道一种强制A和B单独运行,然后缓冲结果,最后只在结果中运行连接查询的方法
谢谢!
你可以使用with
子句 -
with a as ( subquery a),
b as (subquery B)
SELECT * FROM A JOIN B
ON A.FIELD = B.FIELD
您可以使用 NO_MERGE 提示获得所需的信息:
SELECT * FROM
(SELECT /*+NO_MERGE*/ ... FROM SUBQUERY A) A
JOIN (SELECT /*+NO_MERGE*/ ... FROM SUBQUERY B) B
ON A.FIELD = B.FIELD