2
我在内存中有一个数字数组,我需要把它们放在一个临时表中,这样我就可以与其他表进行连接。该列表可以是5或它可以是250000. 我可以一次做一个插入,但我想知道是否有任何SQL技巧,我可以插入100一次插入一些select ....种类我没有想到的事情。什么是SQL插入一堆行的最快方法
批量上传器(在sybase中)不是一个选项,因为它没有Java实现,并且对bcp的shelling也不是一个选项。
我在内存中有一个数字数组,我需要把它们放在一个临时表中,这样我就可以与其他表进行连接。该列表可以是5或它可以是250000. 我可以一次做一个插入,但我想知道是否有任何SQL技巧,我可以插入100一次插入一些select ....种类我没有想到的事情。什么是SQL插入一堆行的最快方法
批量上传器(在sybase中)不是一个选项,因为它没有Java实现,并且对bcp的shelling也不是一个选项。
尝试JDBC批量插入。我从来没有与Sybase合作过,但这也适用于MySql,Postgres和Oracle。
Statement stmt = con.createStatement();
stmt.addBatch("INSERT INTO employees VALUES (1000, 'Joe Jones')");
stmt.addBatch("INSERT INTO departments VALUES (260, 'Shoe')");
stmt.addBatch("INSERT INTO emp_dept VALUES (1000, 260)");
// submit a batch of update commands for execution
int[] updateCounts = stmt.executeBatch();
http://download.oracle.com/javase/1.3/docs/guide/jdbc/spec2/jdbc2.1.frame6.html
这是否还是扩展到250,000插入单批? – MatBailie
它可能。这取决于一个语句的大小。你必须自己尝试一下。随着您增加批量大小,您最终会以OutOfMemory结束。在一台配备1G内存的普通电脑上,我通常使用50k批量大小的应用程序(Xmx)。我发现50k和100k之间没有显着差异:对于1M记录,无论您在应用程序和数据库之间进行10或20次往返,几乎都是一样的。 – bpgergo
超过1的任何批次将是一个巨大的改进。谢谢。 – stu