1

私は現在、3 つの列で構成される複合 PK (クラスター化) を持っています。それらを A、B、C と呼びましょう。すべて一意性を確保するために必要です。外部要因により、現在の PK を削除し、代わりに新しい列に新しいインデックスを追加して、このテーブルを変更する必要があります。

これは標準によって行われます

ALTER TABLE Table_Name DROP CONSTRAINT PK_Name

CREATE INDEX Index_Name ON Table_Name (NewColumn)

問題は、テーブルが巨大 (約 7000 万行) であり、現在の PK で削除を実行してから新しいインデックスを追加するのに 1 時間以上かかることです。より効率的な方法で状況を修正する方法はありますか?

テーブルには複合 PK しかないため、NCI や FK、その他の依存関係について心配する必要はありません。私はSQL Server 2008に取り組んでいます。

4

1 に答える 1

0

1つの代替方法は、適切な制約を使用して新しいテーブルを作成することです。次に、すべての行をコピーします。最後に、古いテーブルとsp_rename新しいテーブルを削除します。名前の変更は高速で、ダウンタイムが短縮されます。

コピー操作中に追加される行について、いくつかの考慮が必要になる場合があります。これに対処する1つの方法は、古いテーブルに名前を変更してから、新しい行をコピーし、その後でのみ新しいテーブルの名前を変更することです。これでも、テーブルをインプレースで変更するよりもはるかに短いダウンタイムが発生します。

于 2012-12-07T12:51:01.913 に答える