2012-04-16 13 views
2

バルク挿入の場合、通常はバッチ処理が優先されます。どのように正確にjdbcの高速挿入のために最適化されますか?JDBCのバッチ挿入

答えて

4

通常、ネットワークラウンドトリップを減らすことによって。たとえば、100の異なるバインド変数を使用して同じ文を100回実行する場合は、バインド変数の100セットすべてを一度にデータベースに送信し、1つのバインド変数を使用して100の結果をすべて取り戻す方がはるかに効率的です各クエリーを順次実行するために100回の別々のネットワークラウンドトリップが発生するよりも、ネットワークのラウンドトリップに時間がかかります。 JDBCドライバーにバッチを作成するよう指示した場合、ドライバーはデータベースとの通信に必要な回数を最小限に抑えることができます。

+1

さらに、特にOracle JDBCドライバでは、バッチ処理された挿入を使用する速度がSQL * Loaderの速度とほぼ一致するため、さらに最適化が適用されると思います。しかし、私は正確にそれを速くするものは何か分かりません。 –

+0

@a_horse_with_no_name、私はこの種の最適化を知るのがちょっと面倒です。それは実際にデータベース側で起こりますか?私が知ろうとしていることは、2つのデータベースにOracleとmysqlがあると言うことです。これらの両方で同じクエリを実行すると、データベースのパフォーマンスは変化します。 – UVM

+0

@a_horse_with_no_name - 'INSERT'文のバッチを持っていても、透過的に実行するのが難しい場合、Oracle JDBCドライバがダイレクト・パス・ロードを行う可能性があります。ネットワーク・ラウンド・トリップを減らし、バインド変数をバルク・バインドするだけで、従来のパスSQL * Loaderのようなパフォーマンスを得ることができます。 –

関連する問題