我有一个如下的SQL语句:
SELECT {SOME CASE WHEN STATEMENTS}
FROM {SUBQUERY 1} A, {SUBQUERY 2} B
WHERE {SOME JOIN CONDITIONS}
背景:
整个连接操作需要4到5分钟才能运行。
有人能告诉我任何可能造成这种情况吗?
答案 0 :(得分:1)
尝试使用NO_PUSH_PRED提示:
http://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements006.htm#BABGJBJC
或者尝试将查询重写为:
SELECT {SOME CASE WHEN STATEMENTS}
FROM (
SELECT * FROM (
{ SUBQUERY 1}
)
WHERE rownum > 0
) A,
(
SELECT * FROM (
{SUBQUERY 2}
)
WHERE rownum > 0
) B
WHERE {SOME JOIN CONDITIONS}
这样可以防止将连接前缀暂停到嵌套子查询中 然后两个子查询应该使用“旧”计划执行,总时间应该是15 + 15秒+一小段时间从两个子查询连接40行。