Oracleデータベースに大量(750.000)のレコードを挿入するために使用されるJavaプログラムがあります。OCIクライアントでOJDBC6ライブラリを使用しています。書き込まれるテーブルには330列が含まれ、そのうち8列が1つ以上のインデックスに表示されます。
2つのアプローチを試した後も、パフォーマンスの問題に苦労しています。
- プリペアドステートメントを1回作成し、各レコードのパラメーターを入力してからステートメントを実行するには、1時間29分かかります。
- プリペアドステートメントを1回作成し、各レコードのパラメーターを入力し、それらをバッチに追加して、500/1000/5000(いくつかのオプションを試しました)の処理済みレコードごとにバッチを実行するには、0時間27分かかります。
ただし、Informatica PowerCenterなどのETLツールを使用して同じデータを同じテーブルにマップすると、数分しかかかりません。このタイミングに到達することは希望的観測かもしれませんが、パフォーマンスが得られないかどうかは疑問です。
このアクションの合理的なタイミングと、それらをどのように達成できるかについて誰かが考えていますか?どんな助けでもありがたいです、事前に感謝します!
(関連する質問:私も多くのレコードを更新する必要があります。最も効率的なアプローチは、変更された列を追跡し、これらの列のみを含むレコード依存のプリペアドステートメントを作成するか、常に更新することです。すべての列、それによって同じ準備されたステートメントを再利用しますか?)