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

Update query for a single column between two huge tables

我有 table 有 5800 万条记录,有 30 列,我想通过映射更新其中一列 table 有两列有 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,但问题相同。有没有其他方法可以提高查询的性能

如果您有足够的空闲 space 使用重新创建您的 table - 使用临时名称和相同结构创建新的 table,使用从当前 [= 插入的 select 16=] 左连接到映射 table,使用并行和追加提示。重命名当前 table,将新 table 重命名为实际名称。将所有 indexes/synonyms、grants/triggers 等从旧的 table 移动到新的。测试您的应用程序。如果没问题那么你可以放弃旧的。