誰かがBULK INSERTが内部的にどのように機能し、なぜ通常のINSERT操作よりもずっと速いのか説明してください。BULK INSERTはどのように内部的に動作しますか?
よろしくおねがいします。 Shishir。
誰かがBULK INSERTが内部的にどのように機能し、なぜ通常のINSERT操作よりもずっと速いのか説明してください。BULK INSERTはどのように内部的に動作しますか?
よろしくおねがいします。 Shishir。
BULK INSERTはSQL Serverのデータベースエンジンでインプロセスで実行されるため、クライアントAPIのネットワークレイヤを介してデータが渡されることがなくなり、BCPやDTS/SSISよりも高速になります。
また、BULK INSERTでは、データのORDER BYを指定できます。これが表のPKと同じ場合は、PAGEレベルでロックが発生します。トランザクションログへの書き込みは、行レベルではなくページレベルで行われます。
通常のINSERTの場合、ロックおよびトランザクションログの書き込みは行レベルです。これにより、BULK INSERTはINSERT文より速くなります。
少なくとも、挿入するレコードごとにトランザクションを作成してコミットするオーバーヘッドを避けることができます。例えば、一度に1つのレコードではなく、ネットワーク全体に大きなデータを送るなど、他の節約があります。
さらに興味深いことに、DB作成者は(特定のベンダーが実際にこれを行うかどうかわからない)賢明になることができます - 挿入するレコードのセットを見ることができ、データページを再編成するのではなく単一のレコードを収容するために、新しい挿入を可能にするためにページの大規模な再編成を行うことができる。同様に、一連のレコードを挿入することがわかっている場合、シャッフルインデックスを効率的に行うことができる。
内部的にはOLEDBレコードセットに変換され、テーブルが読み込まれます。
私はそれほど心配していませんが、クライアントではなくSQL Serverボックスで実行した方が速いと思います。さらに、通常のINSERTではできない制約を管理することができます。