2017-04-27 62 views
0

我很好奇我們可以通過Java中的循環執行MySQL查詢的速度有多快,而且它對我寫的代碼花費的時間非常長。我相信有一個更快的方法來做到這一點。這是執行查詢的一段代碼。使用java快速插入數據庫的方法

PreparedStatement ps=connection.prepareStatement("INSERT INTO books.author VALUES (?,?,?)"); 
for (int i=0;i<100000;i++) 
{ 
     ps.setString(1,test[i][0]); 
     ps.setString(2,test[i][1]); 
     ps.setString(3,test[i][2]); 
     ps.addBatch(); 
} 
int []p=ps.executeBatch(); 

任何幫助將不勝感激。謝謝

+1

在**更小的**批次中執行它可能會更快。 –

+0

在[這個問題](http://stackoverflow.com/questions/3784197/efficient-way-to-do-batch-inserts-with-jdbc),達成的結論是,你這樣做的方式是最快,因爲該語句只需要解析一次。它適用於Oracle而不是MySql,但我認爲這裏適用相同的考慮因素。 –

+0

好吧,我會嘗試創建更小的批次並執行,以查看它是否對執行時間產生任何影響。謝謝 –

回答

1

您的基本方法是正確的。由於您使用的是MySQL,因此您可能需要將rewriteBatchedStatements=true添加到您的連接URL中,如this answer中所述。已知大大加快了對MySQL數據庫的批量INSERT操作。

+0

該選項大幅提升性能。 – Wrench

0

當你有一個巨大的批處理時,還有其他一些事情會引發。因此,「太大」會減慢行數/秒。這取決於幾個設置,特定的表格模式和其他東西。我看到一個太大的批次運行速度比一個更文明的批次慢兩倍。

將分析查詢的開銷視爲等同於插入額外的10行。根據該經驗法則,1000行的批量插入在理論最大速度的1%以內。

可能更快創建一個所有行的文件並做LOAD DATA。但是,這又取決於各種設置,等等。

相關問題