〜60,000行を含むデータベーステーブル(SQL Server 2012 Expressで実行中)があります。私は古い行削除するには、次のコードを使用しています多数のレコードを削除するのに非常に時間がかかります
:(テーブル内のレコードの90%以上が削除されている〜)削除された行の数が多い場合
//Deleting CPU measurements older than (oldestAllowedTime)
var allCpuMeasurementsQuery = from curr in msdc.CpuMeasurements where
curr.Timestamp < oldestAllowedTime select curr;
foreach (var cpuMeasurement in allCpuMeasurementsQuery)
{
msdc.CpuMeasurements.Remove(cpuMeasurement);
}
は、操作が非常に取り長いです。比較的強力なマシン(Intel I5デスクトップ)でこの操作を完了するのに約30分かかります。
これは正常な動作のようですか?
私は操作の時間を短縮するために何ができるのですか?
おかげで、
DeleteAllOnSubmitをご覧ください。 – DavidB
AFAIKはあなたがやっていることは、データベースを削除するコマンドを60,000回以上実行しています。代わりに1つのコマンドまたは数百コマンド以下のバッチを実行することができれば、そのパフォーマンスの問題は発生しません。 – Renan
エンティティフレームワークはそのようなことではあまり良くありません。タイムスタンプで渡すストアドプロシージャを作成するのが最善であり、そのようにすべてのレコードを削除します。 – Belogix