いくつかのアイデア/理論:
SELECT INTO ...を使用すると、RDBMSは元のテーブルの順序に基づいてソート順序を決定できます。既存のテーブルに挿入する場合、クラスター化インデックスまたは非クラスター化インデックスと一致するために必要な並べ替えが必要になる場合があります。
インデックスなし-RDBMSSELECT INTO...
が更新する既存のインデックスがないことが確実にわかっている場合。
競合なし -挿入先のテーブルが存在しないため、SQL Serverは行レベルのロックや競合処理について心配する必要がありません。作成したテーブルは存在しないため、それを参照することはできません。
そうは言っても、テーブルにすばやく挿入する方法は他にもあります。
可能な場合は、クラスター化インデックスキーが一致することを確認してください。つまり、オンザフライでのソートはありません。
すべての非クラスター化インデックスを無効にします。自明です。
リカバリーモードをシンプルに設定し、フラグ610をに設定しON
ます。使用するTABLOCK
ターゲット表と上のヒントをNOLOCK
あなたのソーステーブルの上にヒント。
たとえば、tableaとtablebに同じクラスター化インデックスがあるとします。
INSERT INTO TableB WITH (TABLOCK)
SELECT <Columns>
FROM TableA WITH (NOLOCK)
私の経験では、これはSELECT INTO...
クラスタードインデックスを使用してから作成するよりも高速です。これは、データがすでに含まれているテーブルでも機能することに注意してください。これは、はるかに便利なシナリオです。
編集:
Sql Server 2008でのデータロードパフォーマンスに関する、MSのすばらしいホワイトペーパーを以下に示します。