10秒目をつむったら…

お世話になります

SQL Serverで、
100万件のレコードを削除したいのですが
どのような方法が効率よいでしょうか

また、メモリ負荷など、クライアント側から分かるような実行計画とかは
ありませんでしょうか?

1.100万件を1回でdelete
2.100万件を複数回に分けてdelete
3.100万件を1行ずつキー指定でdelete(deleteを100万回実行)

100万件deleteしてる場合も、他処理でレコードが登録、更新される可能性が高いため、
そちらの処理がタイムアウトなどのエラーにならないようにしたいです

詳しい方に聞いたところ、
delete発行する際に、メモリにアクセスしてるので、
3だとそれが単純計算で100万倍になるので、負荷が高いのでは?
という事でした。

ご教授の程、よろしくお願い致します

A 回答 (3件)

元データの件数はどのくらい?


2000万行あるうちの100万行と、101万行のうちの100万行だと違う方法がありそう。
    • good
    • 1

ローカル処理ではないということで、3ですが20msに一回実行して2日少しでdeleteしたいですね。

    • good
    • 0

もちろん、1回で実行した方が効率は良いです。


処理の1回毎にSQL構文解析→実行計画→実行という動作を行いますし、その都度にメモリやHDDもアクセスすることはあります。できるだけ処理は少ない方が良いです。

>100万件deleteしてる場合も、他処理でレコードが登録、更新される可能性が高いため、
ファントムリードにならないようにきっちりと専有ロックをかけた方が良いです。
で、他処理にはある程度の時間的余裕をもたせられるとベストなのですが。

まあ、その100万件の主キーが何でインデックスがどれくらいあって制約がどのように作られているか、項目数がいくつなのかもわからないので一般論です。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


おすすめ情報