我必须用oracle另一个表中列的内容更新一个表中的列。由于这些表每个都有大约400万条记录,因此我面临着进行更新的困难。
表A结构(临时表)
Col1 Col2 Col3 Col4
L1 P1 PC1 D1
L2 P2 PC2 D1
L3 P3 PC3 D2
L4 P3 PC3 D3
表B结构
Col1 Col2 Col3
E1 P1 F1
E2 P1 F2
E3 P2 F3
E4 P3 F4
E5 P4 F5
我需要用匹配表 A 中的 Col4 中的值更新表B 中的 Col3 表A和B 中的 Col2 。
我尝试使用merge命令,但是由于这2个表具有数百万条记录,因此我们在temp表上遇到了空间问题。
我使用的合并命令是
merge into b
using
(select col2,col4 from a) c
on c.col2=b.col2
when matched then update set b.col3=c.col4;
是否有更好的方法来处理此批量更新?
答案 0 :(得分:0)
对于400万行,我将检查是否可能造成短暂的停机,然后尝试
RENAME b TO b_old;
CREATE TABLE b AS
SELECT col1, col2, coalesce(a.col4, b_old.col3) as col3
FROM b_old
LEFT JOIN a ON a.col2 = b_old.col2;
Recreate indexes, constraints, comments etc on b
DROP TABLE b_old;
如果那仍然太慢,我将对两个表进行分区,然后像并行运行重新创建一样。