合并查询需要12个多小时才能执行任何优化

时间:2011-12-13 10:08:37

标签: sql oracle optimization

我有以下查询需要12小时才能执行,是否可以优化?表DRV_START_DATE的{​​{1}}属于YYYYY数据类型,因此将输入值转换为NUMBER会有所帮助。

to_number

1 个答案:

答案 0 :(得分:3)

您有一个分布式查询,数据来自远程站点。 Oracle工作的默认方式是从远程站点提取所有数据并在本地站点上对其进行过滤。

在您的情况下,这可能是一个糟糕的选择,具体取决于相关数据量。如果是这样,您可以使用DRIVING_SITE提示,它将评估远程站点上的连接并将结果返回到本地数据库。

我从来没有使用带有MERGE的DRIVING_SITE,但我认为这样的事情应该有效:

MERGE INTO XXXX D USING(
   SELECT /*+parallel(a 10)  DRIVING_SITE(YYYYY)*/ 
          a.BATCH_NUMBER,COUNT(*) AS CALL_COUNT 
     FROM YYYYY@LN_RAPROD a 
    WHERE a.DRV_START_DATE BETWEEN TO_CHAR(SYSDATE-7,'YYYYMMDD') 
                               AND TO_CHAR(SYSDATE,'YYYYMMDD') 
      AND a.TOTAL_TYPE =195 
    GROUP BY a.BATCH_NUMBER) 
ON (D.BATCH_NUMBER=S.BATCH_NUMBER)
WHEN MATCHED THEN
     UPDATE SET D.CALL_COUNT=S.CALL_COUNT
WHEN NOT MATCHED THEN
     INSERT (D.BATCH_NUMBER,D.CALL_COUNT)
     VALUES (S.BATCH_NUMBER,S.CALL_COUNT)

顺便说一句,您确定并行提示对您有帮助吗?