Oracle SQL连接性能异常低

时间:2013-09-04 17:19:52

标签: sql oracle join execution-time

我有一个如下的SQL语句:

SELECT {SOME CASE WHEN STATEMENTS}
FROM {SUBQUERY 1} A, {SUBQUERY 2} B
WHERE {SOME JOIN CONDITIONS}

背景:

  • 子查询A和B都可以在15秒内执行,并返回少于20行。
  • JOIN CONDITIONS只有三个简单的共同字段绑定在一起。
  • 执行计划看起来很好,只有25个成本。

整个连接操作需要4到5分钟才能运行。

有人能告诉我任何可能造成这种情况吗?

1 个答案:

答案 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行。