1

我有一个包含 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,但同样的问题。有没有其他方法可以提高查询的性能

4

1 回答 1

2

如果您有足够的可用空间,请使用重新创建表 - 创建具有临时名称和相同结构的新表,使用插入作为从当前表左连接到映射表的选择,使用并行和附加提示。重命名当前表,将新表重命名为实际名称。将所有索引/同义词、授权/触发器等从旧表移动到新表。测试您的应用程序。如果没问题,你可以放弃旧的。

于 2016-11-09T13:43:10.557 回答