一定件数ずつデータを削除したい


何も考えずに大量のDLETE文発行すると、
大量のロック(データ削除&インデックス削除)が発生して、ロックされちゃうので
こんなことをやると、多少は解除できる……

-- 5000件ずつデータを削除

SET ROWCOUNT 5000
     DELETE FROM [テーブル名] WHERE 削除条件

WHILE(@@ROWCOUNT > 0) 
     DELETE FROM [テーブル名] WHERE 削除条件

SET ROWCOUNT 0
どこで、見たんだっけ?って思ったら、SQL Server 2008 自習書シリーズ No.18(※pdf)か。
しかしこの方法では、データを少しずつ削除するので、削除に時間がかかってしまうという問題と、運用管理が複雑になってしまうというデメリットがあります
(獲得するロック数を減らすことで同時実行トランザクションのパフォーマンスは向上するので、全体としてのスループットは向上します)。
この問題は、データ パーテゖションを利用すれば解決できるので、SQL Server 2005 以降のバージョンを利用している場合は、データ パーテゖション機能を利用することをお勧めします。
データ パーテゖションであれば、削除したいパーテゖションを切り離す(SWITCH する)だけで、削除は一瞬で完了します。
はい、すみません。