0

こんにちは、何千もの行を含むファイルから JDBC を使用して Sybase IQ に書き込もうとしています。人々は、batchUpdate を使用する必要があると言います。そのため、NIO でファイルを読み取り、それを PreparedStatement バッチに追加しています。しかし、次のことを行う必要があるすべての行について、ここでは何の利点も見られません

PreparedStatement prepStmt = con.prepareStatement(    
    "UPDATE DEPT SET MGRNO=? WHERE DEPTNO=?");
  prepStmt.setString(1,mgrnum1);            
  prepStmt.setString(2,deptnum1);
  prepStmt.addBatch();

バッチの利点がわかりません。とにかく、ファイルのすべてのレコードに対して何千回も addBatch を実行する必要があります。または、addBatch() を使用して、ファイルから sybase iq にレコードを書き込む必要がありますか。ガイドしてください。どうもありがとう。

4

2 に答える 2

1

基本的に、バッチ更新を使用すると、ネットワーク I/O のオーバーヘッドが削減されます。BufferedWriterディスクへの書き込み中にa が提供するものと同様の利点を提供しています。これが基本的には、データベース更新のバッファリングです。

どんな種類の I/O にもコストがかかります。ディスク I/O であれ、ネットワークであれ。挿入または更新をバッチでバッファリングし、一括更新を行うことで、データベースにアクセスして戻ってくるたびに発生するパフォーマンスへの影響を最小限に抑えます。

データベースサーバーが他のクライアントにサービスを提供するための負荷がほとんど常にかかっている実際のアプリケーションの場合、パフォーマンスへの影響はさらに明白になります。

と組み合わせると、ステートメントが事前にコンパイルされ、バッチの実行中に実行プランもキャッシュされるPreparedStatementため、一括更新がさらに効率的になります。したがって、選択したバッチ サイズに従って変数のバインドが行われ、1 回の呼び出しですべての値が一度に保持されます。batchUpdate()

于 2013-07-02T07:58:11.783 に答える