更新两个巨大表之间的单个列的查询

时间:2016-11-09 13:37:50

标签: oracle oracle12c bulkupdate

我有5800万条记录的表,其中有30列,我希望通过映射另一个表来更新一列,这个表有4500万条带有两列的记录。

MERGE INTO /*+ PARALLEL(tbl_temp) */ tbl_temp tcm
USING (SELECT frn.id, frn.risk FROM temp_new frn ) a
ON (a.id = tcm.fi_id) WHEN MATCHED THEN UPDATE 
SET tcm.risk_label=a.risk;

以上是我尝试过的查询,但需要12个小时以上。我已尝试批量更新也批量大小10000但相同的问题。有没有其他方法可以改善查询的性能

1 个答案:

答案 0 :(得分:2)

如果你有足够的可用空间使用重新创建你的表 - 创建具有临时名称和相同结构的新表,使用insert作为select当前表左边连接到映射表,使用parallel和append提示。重命名当前表,将新表重命名为实际名称。将旧表中的所有索引/同义词,授权/触发器等移动到新表。测试你的申请。如果它没问题,那么你可以放弃旧的。

相关问题