- 締切済み
100万件レコードdelete
お世話になります SQL Serverで、 100万件のレコードを削除したいのですが どのような方法が効率よいでしょうか また、メモリ負荷など、クライアント側から分かるような実行計画とかは ありませんでしょうか? 1.100万件を1回でdelete 2.100万件を複数回に分けてdelete 3.100万件を1行ずつキー指定でdelete(deleteを100万回実行) 100万件deleteしてる場合も、他処理でレコードが登録、更新される可能性が高いため、 そちらの処理がタイムアウトなどのエラーにならないようにしたいです 詳しい方に聞いたところ、 delete発行する際に、メモリにアクセスしてるので、 3だとそれが単純計算で100万倍になるので、負荷が高いのでは? という事でした。 ご教授の程、よろしくお願い致します
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- bin-chan
- ベストアンサー率33% (1403/4213)
元データの件数はどのくらい? 2000万行あるうちの100万行と、101万行のうちの100万行だと違う方法がありそう。
- Tasuke22
- ベストアンサー率33% (1799/5383)
ローカル処理ではないということで、3ですが20msに一回実行して2日少しでdeleteしたいですね。
- ok-kaneto
- ベストアンサー率39% (1798/4531)
もちろん、1回で実行した方が効率は良いです。 処理の1回毎にSQL構文解析→実行計画→実行という動作を行いますし、その都度にメモリやHDDもアクセスすることはあります。できるだけ処理は少ない方が良いです。 >100万件deleteしてる場合も、他処理でレコードが登録、更新される可能性が高いため、 ファントムリードにならないようにきっちりと専有ロックをかけた方が良いです。 で、他処理にはある程度の時間的余裕をもたせられるとベストなのですが。 まあ、その100万件の主キーが何でインデックスがどれくらいあって制約がどのように作られているか、項目数がいくつなのかもわからないので一般論です。