【发布时间】:2015-03-10 16:06:23
【问题描述】:
我正在尝试运行一个大型 SQL 脚本,其中包含对表的数百万个 INSERT(为了测试,我将其限制为 100,000 行)。
我尝试了许多不同的方法:CPYFRMSTMF、FTP、JDBC 客户端、客户端访问数据传输、IBM Data Studio、来自 System i Navigator 的 SQL 脚本...只是想知道其中哪一个更好。 其中一种方法是使用 RUNSQLSTM 运行脚本(位于 IFS 上)。
但是,开始插入记录需要很长时间。 很明显,在开始插入记录之前,该命令正在执行一些先前的任务。
我在 COMMIT 参数中选择了 *NONE,在 OPTION 中选择了 *NOLIST(我不需要假脱机文件)。
但我不知道为什么要花这么长时间。
一个令人难以置信的事情(在我的测试中,我已经尝试了 100,000 条记录)如果我从使用 JDBC 连接 iSeries 的软件中执行脚本,运行该脚本只需 1 分 40 秒。
有什么想法吗?
谢谢!
【问题讨论】:
-
你能给我们一个脚本的例子吗? Java代码怎么样?做得对,如果 java 代码只是一堆
INSERT INTO mytbl values (1,2,3);,java 代码会轻松击败一堆INSERT INTO mytbl values (1,2,3);OTHO,我希望它会更慢。 -
时间不同,因为查询优化器可能知道如何进行插入,因为您之前所做的测试在优化器缓存中。我运行了几组测试并使用最后一组测试的结果 99% 的时间最后一次测试是 SQL 在生产中的运行方式。
-
它们是常见的INSERT,像这样:INSERT INTO PRUMIG (ZONSDE, ZONCDE, PACSDE, PACCDE) VALUES (12345678, 12345.678, 12345678, 12345.678);这只是一个例子。真正的 INSERT 更长。但是,在这种情况下,它的工作方式相同。在插入记录之前,需要很长时间。请记住,我说的是数百万条记录(即使有 100,000 条记录,我也会得到相同的结果。
-
我在下面编辑了我的答案。我记得现在插入的最快方法是平面文件复制。
-
因此,与其制作插入脚本,不如制作一个纯文本文件并将其复制进去。您将所有位保存为 (), b
标签: sql jdbc db2 ibm-midrange