0

ExecuteNoneQuery を使用して 4,500,000 レコードを SQL に挿入するプログラムが c# にあり、挿入に時間がかかりすぎます。挿入には最大で約 10 分かかる高速な方法が必要ですが、管理スタジオを介して別のテーブルから自分のテーブルに 4,500,000 レコードを挿入すると、 3分

4

2 に答える 2

5

このSqlBulkCopyクラスは、大量のデータ セットを高速に挿入できるように設計されています。

ただし、そのようなサイズでは、ディスクのアクセス速度とネットワークの遅延/帯域幅/飽和が影響することを理解する必要があります。

同じマシンでコピーしているようなシナリオでは、あるテーブルを別のテーブルに移入する例は無効です。

于 2012-05-26T09:11:54.487 に答える
1

Oded が既に述べたように、これの出発点は SqlBulkCopy です。ただし、データベースを制御できる場合は、データベースの復旧モデルが [単純] または [一括ログ] に設定されていることも確認する必要があります。これがないと、ジャーナル エントリを作成する SQL Server で大きな打撃を受けることになります。また、TableLock の SqlBulkCopyOptions が設定されていることを確認する必要があります。

この二つは直球です。また、SqlBulCopy BatchSize 設定やトランザクション モデル (UseInternalTransaction を参照) を試してみる価値はありますが、シナリオによって最適な設定が大きく異なる可能性があるため、これらの設定についてアドバイスするのは困難です。TableLock を実行して復旧モデルを確認しても、必要な速度が得られない場合は、バッチ サイズを試してみることができますが、それはグレー エリアです。

于 2012-05-26T11:39:46.287 に答える