私は1.400.000エントリのテーブルを持っています。そのドキュメント多くの行を高速化するにはどうすればいいですか
表の単純なリストである - ドキュメント
- ID int型
- DocumentPathのデータ型はnvarchar
- DocumentValid ビット
私は、ディレクトリをスキャンし、で見つかった文書を設定しますディレクトリは有効です。
public void SetReportsToValidated(List<int> validatedReports)
{
SqlConnection myCon = null;
try
{
myCon = new SqlConnection(_conn);
myCon.Open();
foreach (int id in validatedReports)
{
SqlDataAdapter myAdap = new SqlDataAdapter("update_DocumentValidated", myCon);
myAdap.SelectCommand.CommandType = CommandType.StoredProcedure;
SqlParameter pId = new SqlParameter("@Id", SqlDbType.Int);
pId.Value = id;
myAdap.SelectCommand.Parameters.Add(pId);
myAdap.SelectCommand.ExecuteNonQuery();
}
}
catch (SystemException ex)
{
_log.Error(ex);
throw;
}
finally
{
if (myCon != null)
{
myCon.Close();
}
}
}
アップデートのパフォーマンスは問題ありませんが、もっと必要です。有効な文書の1000000を更新するのに1時間以上かかります。アップデートをスピードアップする良い方法はありますか?私はバッチのいくつかの種類(テーブル値のようなパラメータ)を使用することを考えています。 SQLServerでプロファイルを作成すると、各更新に約5-10msかかる。
私はバルク・コピーのためのDataTableを使用することができることを名言を知っていました。これはうまくいきました:一時テーブルへの挿入が40秒に短縮されましたhttp://msdn.microsoft.com/en-us/library/ex21zs8x.aspx –
これは助けてくれてうれしい! –