2009-11-09 15 views

答えて

6

BULK INSERTはSQL Serverのデータベースエンジンでインプロセスで実行されるため、クライアントAPIのネットワークレイヤを介してデータが渡されることがなくなり、BCPやDTS/SSISよりも高速になります。

また、BULK INSERTでは、データのORDER BYを指定できます。これが表のPKと同じ場合は、PAGEレベルでロックが発生します。トランザクションログへの書き込みは、行レベルではなくページレベルで行われます。

通常のINSERTの場合、ロックおよびトランザクションログの書き込みは行レベルです。これにより、BULK INSERTはINSERT文より速くなります。

1

少なくとも、挿入するレコードごとにトランザクションを作成してコミットするオーバーヘッドを避けることができます。例えば、一度に1つのレコードではなく、ネットワーク全体に大きなデータを送るなど、他の節約があります。

さらに興味深いことに、DB作成者は(特定のベンダーが実際にこれを行うかどうかわからない)賢明になることができます - 挿入するレコードのセットを見ることができ、データページを再編成するのではなく単一のレコードを収容するために、新しい挿入を可能にするためにページの大規模な再編成を行うことができる。同様に、一連のレコードを挿入することがわかっている場合、シャッフルインデックスを効率的に行うことができる。

0

内部的にはOLEDBレコードセットに変換され、テーブルが読み込まれます。

私はそれほど心配していませんが、クライアントではなくSQL Serverボックスで実行した方が速いと思います。さらに、通常のINSERTではできない制約を管理することができます。

From BOL

関連する問題