私はNvarchar(max)以上の60個のフィールドを持つテーブルを持っており、テーブルを別のデータベースにコピーする必要があります。大規模なNvarchar(max)テーブルを1つのデータベースから別のデータベースにコピーする
私はすべてのインデックスを無効にしていますが、少し助けになりましたが、まだすべてのテーブル(1M行以上)をコピーするのに時間がかかります。
もっと速く走らせるためのアイデアはありますか?
私はNvarchar(max)以上の60個のフィールドを持つテーブルを持っており、テーブルを別のデータベースにコピーする必要があります。大規模なNvarchar(max)テーブルを1つのデータベースから別のデータベースにコピーする
私はすべてのインデックスを無効にしていますが、少し助けになりましたが、まだすべてのテーブル(1M行以上)をコピーするのに時間がかかります。
もっと速く走らせるためのアイデアはありますか?
私の経験では、大きなデータをロードする最も速い方法は、一括挿入を使用することです。これは通常フラットファイルから実行されるため、バルク挿入を実行する前に、まずデータをファイルにエクスポートする必要があります。
フラットファイル方式が嫌いなら、代わりにCLRルーチンを記述することができます。 SqlDataReaderを使用して、DataTableのデータを格納しているテーブルから読み取り、次にSqlBulkCopyを使用して一括挿入を実行できます。この方法の利点は、バッファー・システムを使用して必要なメモリーを制限できることです。 SqlDataReaderはメモリ効率が高く、必要に応じて行を読み込んだ後、メモリから削除します.DataTableはそうではありません。つまり、10,000行という制限を設け、DataTableがこの制限に達するたびにSqlBulkCopyを実行し、DataTableの既存の行を削除して次のバッチを実行します。