ITPub博客

首页 > 数据库 > 数据库开发技术 > 大表update例子比较

大表update例子比较

原创 数据库开发技术 作者:liang573728 时间:2019-04-08 17:03:05 0 删除 编辑

测试表a_tmp,1百万条数据,增加一个column
ALTER TABLE A_TMP ADD dt DATE

给a_tmp的dt Update入date数据。尝试了几种方法,均不理想,最后使用merge,迅速update成功。

[@more@]

1、
declare
aa integer :=100;
dd date;
begin
dd := TO_DATE('20000101','yyyymmdd');
loop
aa := aa + 2;
dd := dd + 1/24
update a_tmp set dt = dd where a = aa;
---commit;
exit when aa > 1000000;
end loop;
end;

运行10分钟,没有结果,中断。

2、
UPDATE A_TMP tt SET tt.dt = (
SELECT TO_DATE('20000101','yyyymmdd')+ta.rn/24 FROM ( SELECT ROWID rd, ROWNUM rn FROM A_TMP) ta
WHERE tt.ROWID = ta.rd
);

运行10分钟,没有结果,中断。

3、
MERGE INTO A_TMP tt
USING ( SELECT ROWID rd,ROWNUM rn FROM A_TMP ) ta
ON ( tt.ROWID = ta.rd)
WHEN MATCHED THEN
UPDATE SET tt.dt = TO_DATE('20000101','yyyymmdd')+ta.rn/24;

运行3分钟成功。

Merge 使用多线方式,提高update效率。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/640706/viewspace-1026170/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 索引组织表IOT
下一篇: Minus Intersect用法
请登录后发表评论 登录
全部评论

注册时间:2005-10-15

  • 博文量
    152
  • 访问量
    138341