我有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但相同的问题。有没有其他方法可以改善查询的性能
答案 0 :(得分:2)
如果你有足够的可用空间使用重新创建你的表 - 创建具有临时名称和相同结构的新表,使用insert作为select当前表左边连接到映射表,使用parallel和append提示。重命名当前表,将新表重命名为实际名称。将旧表中的所有索引/同义词,授权/触发器等移动到新表。测试你的申请。如果它没问题,那么你可以放弃旧的。