jdbc sqlserver update文の実行速度が遅い

1073 ワード

問題の説明
Javaでupdate文を実行し、150万件のレコードを持つテーブルを更新します.速度は特に遅く、約2件のsql文/sです.
ぶんせき
jdbcによるupdate文の実行に影響する要因は主に以下のとおりです.
  • ネットワークIO(対応ソリューション1)
  • update文(対応ソリューション2)
  • を実行
    速度が遅すぎるのは主に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枚、またみんながよけいに指導することを望みます