日期:2014-05-17  浏览次数:21281 次

Oracle大数据量增量更新问题
现在有这样一种情况,源表数据量1000W,或者更大,属于总表,增量表数据量百万级别,要求把增量表数据更新到源表中。
我采用的是MERGE语句,根据条件判断是insert还是update,增量表300W的时候且全走UPDATE分支时,执行不动了,请问增量更新还有什么更好的方案?


MERGE INTO MDA_订单_100M
USING MDA_订单_100M_TEMP
ON ( MDA_订单_100M.产品 = MDA_订单_100M_TEMP.产品
     AND MDA_订单_100M.货主城市 = MDA_订单_100M_TEMP.货主城市
     AND MDA_订单_100M.货主地区 = MDA_订单_100M_TEMP.货主地区
     AND MDA_订单_100M.运货商 = MDA_订单_100M_TEMP.运货商
     AND MDA_订单_100M.发货日期 = MDA_订单_100M_TEMP.发货日期
     AND MDA_订单_100M.到货日期 = MDA_订单_100M_TEMP.到货日期
     AND MDA_订单_100M.订购日期 = MDA_订单_100M_TEMP.订购日期
     AND MDA_订单_100M.客户 = MDA_订单_100M_TEMP.客户
     AND MDA_订单_100M.雇员 = MDA_订单_100M_TEMP.雇员
     AND 1 = 1 )
WHEN MATCHED THEN
  UPDATE SET MDA_订单_100M.订购数量_sum = MDA_订单_100M.订购数量_sum + MDA_订单_100M_TEMP.订购数量_sum,
             MDA_订单_100M.订购数量_count = MDA_订单_100M.订购数量_count + MDA_订单_100M_TEMP.订购数量_count,
             MDA_订单_100M.订购数量_avg = ( MDA_订单_100M.订购数量_avg * MDA_订单_100M.订购数量_count + MDA_订单_100M_TEMP.订购数量_avg * MDA_订单_100M_TEMP.订购数量_count ) / ( MDA_订单_100M.订购数量_count + MDA_订单_100M_TEMP.订购数量_count ),
             MDA_订单_100M.订购数量_max = CASE
                                      WHEN MDA_订单_100M.订购数量_max >= MDA_订单_100M_TEMP.订购数量_max THEN MDA_订单_100M.订购数量_max
                                      ELSE MDA_订单_100M_TEMP.订购数量_max
                                    END,
             MDA_订单_100M.订购数量_min = CASE
                                      WHEN MDA_订单_100M.订购数量_min <= MDA_订单_100M_TEMP.订购数量_min THEN MDA_订单_100M.订购数量_min
                                      ELSE MDA_订单_100M_TEMP.订购数量_min
                                    END,
             MDA_订单_100M.单价_sum = MDA_订单_100M.单价_sum + MDA_订单_100M_TEMP.单价_sum,
 &