ExecuteNoneQuery を使用して 4,500,000 レコードを SQL に挿入するプログラムが c# にあり、挿入に時間がかかりすぎます。挿入には最大で約 10 分かかる高速な方法が必要ですが、管理スタジオを介して別のテーブルから自分のテーブルに 4,500,000 レコードを挿入すると、 3分
2 に答える
このSqlBulkCopy
クラスは、大量のデータ セットを高速に挿入できるように設計されています。
ただし、そのようなサイズでは、ディスクのアクセス速度とネットワークの遅延/帯域幅/飽和が影響することを理解する必要があります。
同じマシンでコピーしているようなシナリオでは、あるテーブルを別のテーブルに移入する例は無効です。
Oded が既に述べたように、これの出発点は SqlBulkCopy です。ただし、データベースを制御できる場合は、データベースの復旧モデルが [単純] または [一括ログ] に設定されていることも確認する必要があります。これがないと、ジャーナル エントリを作成する SQL Server で大きな打撃を受けることになります。また、TableLock の SqlBulkCopyOptions が設定されていることを確認する必要があります。
この二つは直球です。また、SqlBulCopy BatchSize 設定やトランザクション モデル (UseInternalTransaction を参照) を試してみる価値はありますが、シナリオによって最適な設定が大きく異なる可能性があるため、これらの設定についてアドバイスするのは困難です。TableLock を実行して復旧モデルを確認しても、必要な速度が得られない場合は、バッチ サイズを試してみることができますが、それはグレー エリアです。