Azure SQL
スペースが不足している数千万行の DB テーブルがあります。コンテンツの一部を削除するという選択がなされ、私はこのスクリプトを書く任務を負っています。
私が選択したプロセスは、保持したいデータ (比較的少量ですが、それでも数百行) をメイン テーブルである一時テーブルにコピーし、truncate
一時テーブルの内容をメイン テーブルに再挿入することです。テーブル。
このようなもの:
SELECT * INTO tmp FROM source
TRUNCATE TABLE source
INSERT INTO source (<fields>) SELECT <fields> FROM tmp
source
ただし、テーブルに挿入されたデータが失われないようにする必要がありますSELECT * INTO
。
データが失われないようにするために使用できるプロセスはありますか?
最新の主キーを変数に保存し、SELECT * INTO
それよりも高い主キーを持つ行のみを取得して、別の変数を使用することを検討しました。これにより、コピーが高速になると思います。この仮定は正しいですか?
もう 1 つのオプションは、単純にスクリプトを手動で実行することです。これは、ゆっくりと、しかし確実に、DELETEs
必要のない行だけを実行します。行が削除されるとこのプロセスは高速化されますが、これを高速化する方法は思いつきません。