SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

TOP と ROWCOUNT を使用したデータ削除 その 2

leave a comment

すこし時間が空いてしまいましたが、件数を絞って削除するパターンで時間を計測してみたいと思います。

今回のテスト用のテーブルには date 型のフィールドを設定しています。

レコード削除時に日付を指定して削除を実行してみます。

– TOP を指定しないで範囲削除 –

SET NOCOUNT ON
USE [WORK]

DELETE FROM
??? [dbo].[Tbl1]
WHERE
??? [Col3] BETWEEN ‘2040-01-01’ AND ‘2100-12-31’

– 削除の処理時間 –

1 回目 11 秒
2 回目 10 秒
3 回目 14 秒

?

続いて TOP と ROWCOUNT を指定して削除してみます。

– 10,000 件ずつ削除 –

SET NOCOUNT ON
USE [WORK]

WHILE(0=0)
BEGIN
??? DELETE TOP(10000)
??? FROM
??????? [dbo].[Tbl1]
??? WHERE
??????? [Col3] BETWEEN ‘2040-01-01’ AND ‘2100-12-31’
??? IF @@ROWCOUNT = 0
??? BEGIN
??????? BREAK
??? END
END

?

– 削除の処理時間 –

1 回目 28 秒
2 回目 23 秒
3 回目 20 秒

特定件数ずつ削除したほうが遅いですね。

単純復旧モデルでチェックポイントを明示的に発生させながら、ログを切り捨てる場合以外は、
件数を指定して削除させるメリットはないかもしれないですね。

今まで処理効率が良いのかなと考えていたのですが違っていたようで。

Share

Written by Masayuki.Ozawa

11月 29th, 2009 at 1:34 pm

Posted in SQL Server

Leave a Reply