私の直感では、新しい主キー、ファイル グループ、およびファイルを使用して並列テーブルを作成する必要があります。
私の仮定をテストするために、最初の 500 万個の素数を 3 つのファイルまたはファイル グループに保存した古いブログ記事を調べました。
Kalen Delaneyが作成した TSQL ビューを使用し、標準に合わせて変更してパーティション情報を確認しました。
ご覧のとおり、主キーに基づいて 3 つのパーティションがあります。
次に、my_value 列に主キーをドロップし、chg_value という名前の新しい列を作成し、それを素数に更新してから、新しい主キーの作成を試みます。
-- drop primary key (pk)
alter table tbl_primes drop constraint [PK_TBL_PRIMES]
-- add new field for new pk
alter table tbl_primes add chg_value bigint not null default (0)
-- update new field
update tbl_primes set chg_value = my_value
-- try to add a new primary key
alter table tbl_primes add constraint [PK_TBL_PRIMES] primary key (chg_value)
まず、PK をドロップした後もパーティションが残っていることに驚きました。ただし、ビューには、インデックスが存在しないことが示されています。
次に、制約の作成中に次のエラーが表示されます。
パーティションをスキームの一部ではない 1 つのファイル グループにマージ/切り替え、主キー、パーティション関数、およびパーティション スキームを削除/作成し、適切なマージ/切り替えステートメントを使用してデータをもう一度移動することもできますが、いいえ。
これにより、大量の作業 (TSQL) が生成され、ディスク上で大量の I/O が発生します。
スペースがある場合は、新しい主キーを使用して並列パーティション テーブルを作成することをお勧めします。古いテーブルから新しいテーブルにデータを再ロードします。
データ圧縮を使用しておらず、エンタープライズ バージョンの SQL Server を使用している場合は、オンにしてバイト数を節約してください。
幸運を!
ジョン
www.craftydba.com