4

約185k行のバイナリ ファイルがあります。C#ファイルを数秒で解析します。MSSQLそのデータでテーブルを更新する最良の方法は何でしょうか?

私が試したこと:

  1. 最も簡単な方法 - バイナリ行を読み取り、解析し、テーブルを更新します。すべてのデータを更新するには、プロセス全体で約 2 日かかります。
  2. 200 個の更新クエリを組み合わせて、一度に MSSQL に送信します。この場合、更新には 8 ~ 10 時間かかります。
  3. 500 以上のクエリを 1 つに結合します。より高速に動作しますが、タイムアウトの例外が時々ドロップされるため、一部の更新が行われません。

更新プロセスをスピードアップする方法について何かアドバイスはありますか?

4

3 に答える 3

2

本当に C# 経由でやりたいかどうかわからない: おそらくBULK INSERTを使用して、データが適切にフォーマットされたファイルを渡したいと思うでしょう。

于 2012-09-06T03:42:04.023 に答える
1

SqlBulkCopy(一時テーブルに対して) を使用し、その後にMERGE.

一括コピー方式では、.NET クライアントからの「プッシュ」を使用してデータを効率的に転送できます。を使用BULK INSERTするには、サーバーからの「プル」が必要です (必要なローカル ファイル アクセスと共に)。

次に、MERGEコマンド (SQL Server 2008+) を使用して、目的のルールに従って、一時テーブルからターゲット テーブルにデータを挿入/更新/アップサートできます。この時点でデータは完全にデータベースにあるため、この操作は可能な限り高速になります。を使用すると、同じトランザクション内のコマンドであっても、多くの個々のコマンドよりもパフォーマンスが向上MERGE する場合があります。

以下も参照してください。

于 2012-09-11T22:54:38.327 に答える