2012-07-11 48 views
2

我有一個Java程序連接到SQL Server 2008數據庫並執行修改。如果我有一百萬條記錄,我想修改,是不好的做法,操作如下:與Java的多個SQL查詢(效率)

for(all of the records I need to modify) { 
    PreparedStatement pst = conn.prepareStatement(someQuery); 
    // set record specific parameters for pst 
    // execute pst 
} 

或者我應該建立一個單一的查詢和執行它?它會有所作爲嗎?它取決於它是UPDATE,INSERT還是DELETE?我的SQL知識很基礎。

回答

1

對於大量的更新,最好使用Statement.executeBatch()

嘗試谷歌爲「java executebatch示例」爲例。

您很可能還希望確保正確使用事務,查詢的大量開銷來自隱式事務(每個查詢一個事務),其中對於多個語句使用單個事務可以更有效。

+0

好的,謝謝,正是我需要的。所以,如果我正在做多個SELECT,executeBatch不會幫助我(?),那麼在這種情況下我將如何正確使用事務? – chris 2012-07-11 16:45:25

+0

@xcross你在編碼之前顯然需要數據庫和SQL方面的一些知識。你有一位可以幫助你挖掘SQL World的DB Master嗎?或者嘗試在Google上查找教程。 – Tusc 2012-07-11 17:24:49

+0

@Tusc那麼有用...... – chris 2012-07-11 17:35:30

2

如果查詢您的所有迭代一樣的,迭代之前創建PreparedStatement,並在反覆調用結束PreparedStatemetn.executeBatch()Jesse Webb建議。

我建議在幾次迭代之後(可能在每次1000次迭代之後)提交您的事務,因爲當更新或刪除記錄而未提交事務時,鎖定變更記錄會對其他用戶造成問題(如果你不是這些數據庫對象的唯一客戶端!)。

+0

+1用於建議對事務進行批量提交。對於我所處理的批處理作業,我們決定使用批次數爲100的鎖,以獲得最大的性能增益。你將不得不嘗試找出最適合你的東西。 – 2012-07-11 19:06:37