1

私はc#コードから大量の挿入と更新を頻繁に行っていますが、できるだけ速く行う必要があります。このプロセスを高速化するためのすべての方法を見つけるのを手伝ってください。

  1. を使用してコマンドテキストをStringBuilder作成します。;
  2. String.Formatまたはを使用しないでくださいStringBuilder.AppendFormat、それは複数のStringBuilder.Append呼び出しよりも遅いです
  3. 再利用SqlCommandしてSqlConnection
  4. sを使用しないでくださいSqlParameter(バッチサイズを制限します)
  5. 構文を使用するinsert into table values(..),values(..),values(..)(ステートメントあたり1000行)
  6. できるだけ少ないインデックスと制約を使用する
  7. 可能であれば単純な回復モデルを使用する

上記のリストを更新するのに役立つ質問があります

  1. コマンドあたり(1回のExecuteNonQuery()呼び出しあたり)のステートメントの最適な数はいくつですか?
  2. 挿入と更新を同じバッチに含めるのは良いですか、それとも別々に実行する方が良いですか?

私のデータはtcpによって受信されているので、ファイルまたは外部テーブルからのデータの読み取りを伴う一括挿入コマンドを提案しないでください。

ステートメントの挿入/更新レートは約10/3です。

4

3 に答える 3

2

テーブル値パラメーターを使用します。多数の行を使用する場合、これらは非常に適切にスケーリングでき、BCPレベルに近いパフォーマンスを得ることができます。ここで、C#側からそのプロセスを非常に簡単にする方法についてブログを書きました。あなたが知る必要がある他のすべてはここのMSDNサイトにあります。通常のSQLバッチを少し調整するよりも、この方法でパフォーマンスを大幅に向上させることができます。

于 2012-10-18T14:16:10.443 に答える
1

SQLServer2008の時点では、TableParametersが最適です。この記事を参照してください(ステップ4)

http://www.altdevblogaday.com/2012/05/16/sql-server-high-performance-inserts/

これを挿入プロセスの並列化と組み合わせました。それも役に立ったと思いますが、チェックする必要があります;-)

于 2012-10-18T19:24:07.230 に答える
0

SqlBulkCopy一時テーブルに使用してから、SQLMERGEコマンドを使用してデータをマージします。

于 2012-10-18T19:13:59.783 に答える