db2大量数据千万级表更新

db2大量数据更新表其中一个表有六千多万表A,另外一个也是四五千万表B,怎么才能实现用表B快速更新表A,主键相同则更新,不同则插入,我用merge into出现了问题,sql语句跑了3个多小时就开始rollback,结果rollback有花了20多个小时才完成,比蜗牛还慢,不知道有没有其他更好的解决办法??如果用存储过程的话效率也应该不是很高,不知道 采用 import。。。insert_update ...... 的效果会怎样?
我目前项目的具体情况没有给你说清楚,具体的需求没有给你说。因为这个四千万的数据本来是在一个数据文件里面,是后面导入B表的,所

以才考虑要不要用import直接导入更新的,如果像你说的这样做的话,我还不如直接取全量数据,不用取这每日的几千万增量来更新表,直

接load全量到我的表,因为全量数据在仓库,需要将数据转换一下取增量到应用库,目前还没有想到好的办法来转移数据。
不过你的思想也不错,可以借鉴一下,谢谢!
另外,请问下:
loade from my_cur of cursor replace into c nonrecoverable; 这里为什么不直接load到a表,要先load到临时表c,然后再load到a表?
declare my_cur1 cursor for select * from c;
loade from my_cur1 of cursor replace into a;

这种情况我以前也碰见过,一般的数据库都搞不定,几千万的数据,在进行比较并更新插入数据,得很大的临时表空间和数据库日志文件,我是用load搞定的,
创建一个临时表,用load cursor做,追问

load cursor 怎么实现更新呢?

追答

loader cursor 不是用来更新的,是把两个表关联插入新表的,因load不记日志,直接把数据写在底层数据页上的,所以快,当然也存在一定的风险,在用之前,建议先看看db2 load的语法与注意事项。

追问

load的用法我倒是知道,只是我现在是想办法更新。本来想先删除相同的数据再insert,但是数据量太大也会有问题,实在不行的话 就只有用 import。。。insert_update ...... 了

追答

用insert和import是一样的效果,它俩执行基础差不多,速度不会差很多,而且要先把数据导出来一次,现import入库,你觉得会快吗?
有那么复杂吗?搞得那么麻烦
create table c(id int, col varchar(10));
declare my_cur cursor for select value(a.id, b.id), value(b.col, a.col) from a full join b on a.id = b.id;
loade from my_cur of cursor replace into c nonrecoverable;
declare my_cur1 cursor for select * from c;
loade from my_cur1 of cursor replace into a;

追问

我目前项目的具体情况没有给你说清楚,具体的需求没有给你说。因为这个四千万的数据本来是在一个数据文件里面,是后面导入B表的,所以才考虑要不要用import直接导入更新的,如果像你说的这样做的话,我还不如直接取全量数据,不用取这每几千万增量来更新表,直接load全量到我的表,因为全量数据在仓库,
晕死,居然说字数太多,发不出去,后面跟上

温馨提示:答案为网友推荐,仅供参考
相似回答