SQLステートメントINSERT INTO TABLE1 SELECT * FROM TABLE2
が一括挿入と同じように機能することを知りたいだけです。
いいえの場合、レコードの挿入時にインデックスを除外する方法はありますか?プロセスは1回の実行で150ミリオンのデータを挿入しています。
ステージテーブル(インデックスTable1
はありません)を作成し、ステージテーブルからターゲットテーブル(インデックスTable2
を持つテーブル)に転送する予定です。
プロセスからフラットファイルを作成する状況ではありません。
しかし、Table1
(インデックスなし)からTable2
(インデックス付き)にデータを転送するときに、プロセスを高速化できるものを探しています。
BulkInsert
をTable1
からTable2
に使用する方法はありますか?
あなたの最善の策は、[〜#〜] ssis [〜#〜]またはBULK INSERTを使用することです。それらを使用すると実行できるさまざまなパフォーマンス改善があり、それらは The Data Loading Performance Guide に非常によく文書化されています。
[〜#〜] ssis [〜#〜]レベルでは、以下の内容を調べて、データの読み取りとデータのロードを高速化できます。
詳細については、「 SQL ServerへのSSIS一括挿入の高速化 」を参照してください。
BULK INSERT操作を改善するいくつかの良い方法を以下に示します。
最大並列度は、デフォルトではなくサーバーで構成する必要があります。それをどのように構成するかについての私の回答を参照できます ここ 。
SQL Server 2014を使用している場合、 SELECT ... INTO
は並列です 。
また、サーバー上でWait Statisticsを監視する必要があります。特にSOS_SCHEDULER_YIELDを実行すると、複数のCPUが同時にバルクロード操作を実行し、同じCPUサイクルで競合するサーバーでスケジューラの競合が発生します。
以下も参照してください。
はい。 table2 select * from table1への挿入は、一括挿入と非常によく似ています。テーブルが同じである場合にのみ機能します。