2011-08-17 44 views
2

我在內存中有一個數字數組,我需要把它們放在一個臨時表中,這樣我就可以與其他表進行連接。該列表可以是5或它可以是250000. 我可以一次做一個插入,但我想知道是否有任何SQL技巧,我可以插入100一次插入一些select ....種類我沒有想到的事情。什麼是SQL插入一堆行的最快方法

批量上傳器(在sybase中)不是一個選項,因爲它沒有Java實現,並且對bcp的shelling也不是一個選項。

回答

3

嘗試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

+0

這是否還是擴展到250,000插入單批? – MatBailie

+1

它可能。這取決於一個語句的大小。你必須自己嘗試一下。隨着您增加批量大小,您最終會以OutOfMemory結束。在一臺配備1G內存的普通電腦上,我通常使用50k批量大小的應用程序(Xmx)。我發現50k和100k之間沒有顯着差異:對於1M記錄,無論您在應用程序和數據庫之間進行10或20次往返,幾乎都是一樣的。 – bpgergo

+0

超過1的任何批次將是一個巨大的改進。謝謝。 – stu

相關問題