jdbc sqlserver update文の実行速度が遅い
問題の説明
Javaでupdate文を実行し、150万件のレコードを持つテーブルを更新します.速度は特に遅く、約2件のsql文/sです.
ぶんせき
jdbcによるupdate文の実行に影響する要因は主に以下のとおりです.ネットワークIO(対応ソリューション1) update文(対応ソリューション2) を実行
速度が遅すぎるのは主にupdate文のwhere句によるものです.
ソリューション
1.jdbc一括実行を採用し、java ioを減らす.
主に次の方法を使用します.
複数のSQL文の一括処理
この方法は効率を一定に向上させるが,特に顕著ではない.
2.テーブル設計が妥当かどうかを確認し、where句検索の列をプライマリ・キーに設定
なぜなら、sqlserverではプライマリ・キーが集計インデックスを使用しているため、インデックス内のデータの論理順序がデータの物理順序(Hashインデックス?)を決定するため、非集計インデックスに比べて検索速度が速くなります.
この方法を使用すると、Update文の実行速度が大幅に向上します.
データベースの白い1枚、またみんながよけいに指導することを望みます
Javaでupdate文を実行し、150万件のレコードを持つテーブルを更新します.速度は特に遅く、約2件のsql文/sです.
ぶんせき
jdbcによるupdate文の実行に影響する要因は主に以下のとおりです.
速度が遅すぎるのは主にupdate文のwhere句によるものです.
ソリューション
1.jdbc一括実行を採用し、java ioを減らす.
主に次の方法を使用します.
addBatch(String): SQL ;
executeBatch(); ;
clearBatch();
複数のSQL文の一括処理
Statement updateAll = connection.createStatement();
for (int i=0;i<1000;i++){
updateStr = "update xxxx set yyyyy where zzzz"
updateAll.addBatch(updateSqlStr); // SQL
if((i+1)%100==0){
updateAll.executeBatch(); //
updateAll.clearBatch(); // updateAll SQL
}
}
この方法は効率を一定に向上させるが,特に顕著ではない.
2.テーブル設計が妥当かどうかを確認し、where句検索の列をプライマリ・キーに設定
なぜなら、sqlserverではプライマリ・キーが集計インデックスを使用しているため、インデックス内のデータの論理順序がデータの物理順序(Hashインデックス?)を決定するため、非集計インデックスに比べて検索速度が速くなります.
この方法を使用すると、Update文の実行速度が大幅に向上します.
データベースの白い1枚、またみんながよけいに指導することを望みます