各位前輩/大神 好:
目前使用spring boot MVC開發後端web程式,使用jdbctemplate寫資料庫程式,
用到其batchUpdate方法批次更新5萬筆資料,共花了26.443秒,執行效能不是很好,
說明如下:
1.軟體版本說明:
spring boot 3.0.2
spring-jdbc 6.0.4
mssql-jdbc 12.2.0
資料庫 微軟SQL Server 2019 Express
作業系統Windows 10
2.程式碼:
StocksRepository.java
僅列出batchUpdate方法的程式碼
public void batchUpdate(List<stock> stocks) {
jdbc_template.batchUpdate(
"update stocks set amount = ? where parts_number = ?",
new BatchPreparedStatementSetter() {
public void setValues(PreparedStatement ps,int i)
throws SQLException{
ps.setString(1,stocks.get(i).getAmount());
ps.setString(2,stocks.get(i).getParts_number());
}
public int getBatchSize(){
return stocks.size();
}
}//end BatchPreparedStatementSetter
);//end jdbctemplate batchupdate
}
rewriteBatchedStatements=true
作者:
surimodo (好吃棉花糖)
2023-04-02 12:34:00你最後那個只是把一個大List拆成小List又串一起處理
作者:
achaos (熱~~~~)
2023-04-02 12:48:00parts_number有設定index嗎?
database talbe parts_number有設定索引回fgh81113:batch是設定5萬筆,共花26秒,效能不好。
作者:
achaos (熱~~~~)
2023-04-02 16:20:00batchUpdate有一個函數可以放batctSize,改成500看看batchSize,我記得建議是設定500~1000
作者:
kentyeh (kent)
2023-04-02 21:33:00建議自己處理commit時機,可考慮每仟筆commit 一次
原程式碼看起來沒甚麼問題 索引也設了sql server還有一招 "聚集索引 非聚集索引"但這招可能不是你說想調整就調整的方式
作者: mybluesky (天族) 2023-05-22 23:04:00
請將更新資料放另一暫存表,一次更新原表數據
作者:
sw12 (專注.幽默)
2023-06-26 14:36:00改r2dbc