2

キーを自動的に生成するテーブルに大量の行を挿入したいと考えています。JDBC は、生成されたキーの取得がバッチ更新で機能することを保証しません。

It is implementation-defined as to whether getGeneratedKeys will return generated values after invoking the executeBatch method.(JDBC 4.0 仕様 2006、p. 135)。

私には2つの選択肢があります。すべての行を個別に挿入してキーを取得します。または、バッチ挿入を実行してからキーをクエリします。

複数のキーをクエリするためのラウンドトリップを避けるために、ここでこのアプローチを使用できます。たとえば、サイズの異なる 5 つの準備済みステートメントがある。そして、私の「バッチクエリ」を可能な限り最小のステートメントに分割します。

より速い方法は何ですか?

4

1 に答える 1

1

場合によります。

繰り返しexecuteBatch()使用するよりも実際に速いかどうかはわかりません。したがって、私の提案は次のとおりです。PreparedStatement

  1. getGeneratedKeys()JDBCドライバーで機能するかどうか試してください。それが機能しない場合、バッチ挿入はとにかく機能しません。

  2. 両方のテストケースを作成し、パフォーマンスを測定します。これにより、決定の基礎となる実際のデータが得られます。他のすべては単なる当て推量です(そして90%の確率で間違っています)。

[編集]アプリのデータベースに依存しないようにしたい場合は、アプリにテストを追加して、一時/テストテーブルで実行します。テストが成功した場合は、バッチ更新を使用する実装を選択します。それ以外の場合は、ブルートフォースにフォールバックします。

于 2011-06-14T11:54:56.967 に答える