哪个将在DB2中具有更多性能

时间:2010-11-10 07:05:43

标签: db2

我需要从拥有20亿条记录的主表中插入一个表。插入需要满足一些条件,并且还要在一些列中进行计算,然后必须插入。

我有两个选择,但我不知道应该遵循哪些方案来提高效果。

1个选项

通过使用条件从主表中过滤来创建游标。并逐一获取caluclation记录,然后最后插入子表

2选项 首先使用into conditon插入,然后使用update语句进行计算。

请协助。

2 个答案:

答案 0 :(得分:1)

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

使用批量操作时,数据库通常会更好,因此如果使用选项2,它肯定会为您提供更好的性能。选项2也可以更好地进行故障排除(因为流程完全分离 - 步骤1:下载,步骤2:计算)而不是选项1如果在流程中间出现错误,您将被迫重新执行所有步骤。

答案 1 :(得分:0)

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

1)编写SQL存储过程(无需将数据发送出数据库进行更改) 2)如果使用Java / JDBC,则使用“批量更新”功能同时更新多个记录 3)如果您使用Informatica之类的工具,请打开informatica中的批量加载功能

另请参阅关于提高插入性能的IBM DW文章。这篇文章有点旧,但概念仍然有效。 http://www.ibm.com/developerworks/data/library/tips/dm-0403wilkins/