2010-11-10 37 views
0

我需要从具有20亿条记录的主表插入一个表。插入需要满足一些条件,并且还需要在需要计算的某些列中插入。哪个在DB2中具有更多性能

我有2个选项,但我不知道要按照哪些方法来提高性能。

1选项

通过与conditons从主表滤波创建一个游标。并得到一个接一个的记录,然后插入到子表中

2选项 先插入使用条件,然后使用update语句进行计算。

请协助。

回答

1

有一个游标来获取数据,执行计算,然后插入数据库将是耗时的。我的猜测是,因为它涉及数据连接和每个检索和插入的I/O(对于两个数据库)

数据库通常对批量操作更好,所以如果使用选项2,它肯定会给你更好的性能。选项2更适合故障排除(因为该流程完全分离 - 步骤1:下载,步骤2:计算)比选项1更好,在进程中间出现错误的情况下,您将被迫重新执行所有步骤。

0

打开游标并逐个插入记录可能会导致严重的性能问题,数量在十亿左右。特别是如果您的数据库层和应用层之间的网络较弱。最快的方法是使用Db2导出实用程序下载数据,让程序处理文件中的数据,然后将文件加载回子表。除了基于文件的选项外,还可以考虑以下方法

1)编写一个SQL存储过程(不需要将数据从数据库中发出以进行更改) 2)如果使用Java/JDBC使用批处理更新功能在如果你使用像Informatica的工具,同时 3)更新多条记录,在Informatica的

打开批量加载功能也看到imporving插入性能的IBM DW文章。文章有点旧,但概念仍然有效。 http://www.ibm.com/developerworks/data/library/tips/dm-0403wilkins/