Oracle 11g - 如何在三个表上加速并行插入

时间:2013-11-19 07:05:15

标签: sql performance oracle parallel-processing oracle11g

我们希望加快下面的插入声明。现在需要大约1个多小时才能完成。

PM表包含大约79M条记录,F1有4.8M条记录,RESULT包含80M条记录。

任何想法如何加快速度?

insert /*+ PARALLEL(16) APPEND NOLOGGING */ into MATCH_DATE(ID1, ID2)
select /*+ PARALLEL(16) */ T1.ID ID1, T2.ID ID2
from PM T1, F1 T2, RESULT
where  RESULT.RECON_PM_ID = T1.ID
    and RESULT.STATUS in (:ZERO, :TWO)
    and RESULT.RECON_CONFIG_ID = :RECON_CONFIG_ID
    and T1.UPLOAD_DT >= sysdate - :ONE
    and RESULT.CREATE_DT >= sysdate - :SIXTY
    and RESULT.RECON_F1_ID is null
    and T2.STATUS = :ZERO
    and T2.UPLOAD_DT >= sysdate - :ONE
    and T1.TRAN_DT between T2.TRAN_DT - :ASDF
and T2.TRAN_DT + :ASDF
and T1.CHARGING_NO = T2.CHARGING_NO 
and T1.USAGE_TYPE = T2.USAGE_TYPE 

以下是Enterprise Manager的执行统计信息:

oracle parallel insert

1 个答案:

答案 0 :(得分:0)

当您在同一个表上有多个谓词时,常规表统计信息的价值有限,因此请确保正在调用优化程序动态抽样。一个常规的解释计划会告诉你,默认情况下我认为11g将调用该查询的动态采样,但如果没有,那么预期的基数将是不准确的。

我也避免对类似的查询使用绑定变量 - 变量值的变化可能意味着完全不同的计划将是有益的,并且在多分钟查询的上下文中硬解析时间不会是一个重大问题。