入力された日付に基づいて大規模な (〜 50m レコード DB) から行を削除するアーカイブ スクリプトを実行しています。日付フィールドは、テーブルのクラスター化インデックスであるため、条件ステートメントを適用しています。
この削除を while ループで実行し、バッチで 1000 から 100,000 のレコードを試しています。バッチサイズに関係なく、驚くほど遅いです。1 分間に 10,000 件のレコードが削除されます。実行計画を見ると、「Index Delete」に多くの時間が費やされています。テーブルには約 15 のフィールドがあり、そのうちの約 10 には何らかのインデックスがあります。この問題を回避する方法はありますか? 各インデックスの削除になぜそんなに時間がかかるのかさえわかりません。誰かがここで何が起こっているのかを正確に明らかにすることができますか? これは私の実行計画のサンプルです:
代替テキスト http://img94.imageshack.us/img94/1006/indexdelete.png
(シーケンスは削除コマンドを指します)
このデータベースはライブであり、頻繁に挿入されています。そのため、サイズをトリミングするためにコピーと切り捨ての方法を使用することをためらっています。ここで見逃している他のオプションはありますか?