2017-03-17 7 views
1

私は1kかそれ以上の更新を行う必要があるMySQLデータベースを持っており、executeBatchまたはexecuteUpdateを使用する方が適切かどうか検討しています。準備された記述は、1k以上のids(更新されるテーブルのPKである)のArrayList上に構築される。テーブルの更新ごとに、更新されたかどうかを確認する必要があります(IDがテーブルにない可能性があります)。 idが存在しない場合、バッチ挿入を行うために使用される別のArrayListにidを追加する必要があります。上記のJDBC:executeBatchまたはexecuteUpdateを使用して各UPDATE文が成功したかどうかを確認する方がよいでしょうか?

、行うには、それがより適切である:単にバッチを作成し、executeBatch()を使用

  1. 様々な個別のexecuteUpdate()し、それが更新されていない場合は、idを保存、または

  2. 、個々の文/ idごとに0または1の配列を返します。

ケース2の場合、オーバーヘッドは0または1の戻り値をすべて保持する追加の配列になります。ケース1では、各UPDATEを別々に実行するためにオーバーヘッドが発生します。

+0

私は制御されたレイテンシの下で両方を試してみるつもりでした。しかし、バッチが勝ったと思われる – efekctive

答えて

0

必ずexecuteBatch()を実行し、jdbc接続文字列に "rewriteBatchedStatements = true"を必ず追加してください。

スループットの増加は誇張するのが難しいです。 1Kの更新は、適切なインデックスとそれらを利用するWHERE句があると仮定して、単一の更新よりもむしろ長い時間がかかります。

バッチ更新を行う時間は、接続文字列に余分な設定をせずに、各更新を個別に行うのとほぼ同じになります。

+0

id ArrayListを使用して各ステートメントを繰り返し作成すると、executeBatch()の戻り値が順序どおりでない(つまり、それらがidsのArrayListと一致しない)理由がありますか? – ohbrobig

+0

いいえ、それらはバッチに追加する順序にする必要があります – GreyBeardedGeek

0

ネットワークの待ち時間は、何とか同じボックスで実行していない限り考慮する必要があるため、バッチ処理が必要です。

関連する問題