SQL Serverを使用する場合、別のファイルグループにテーブルを作成してもまったく問題ありません。
create table common.test
(
id int,
CONSTRAINT [pk_test] PRIMARY KEY CLUSTERED (id ASC) ON [common_index],
) ON [common_data]
しかし、バックグラウンドのデータはどうなりますか?それらは実際には2つの異なるファイルグループに格納されていますか? Management Studioでテーブルプロパティを見ると、common_index
ストレージとして。
これが本当なら、なぜ2つの別々のファイルグループでそれらを定義するのに機能するのですか?
主キーが削除されて別のファイルグループに再作成されると、保存されているデータはどうなりますか?
実際には、クラスター化インデックスと非クラスター化インデックスがすべてです。主キーはそれとは何の関係もありません。クラスタ化インデックスISデータ。実際のテーブルデータは、クラスタ化インデックスのデータページに含まれています。
テーブルにクラスター化インデックスを配置すると、クラスター化インデックスを指定する場所にデータが格納されます。上記のコードを非クラスター化主キーに変更した場合、データは[common_data]
にあり(実際にはヒープです)、主キーの非クラスター化インデックスは[common_index]
にあります。次に、クラスター化インデックスを作成し、それを[uncommon_data]
にポイントすると、テーブルデータは新しいファイルグループに移動され、[common_data]
には何も残りません。
ああ、2つの異なるファイルグループを指定できる理由は、構文の2つの異なる部分で作業しているためです。 ON [common_data](テーブルのFG)は、SQLにテーブルを配置する場所を指示します。 ON [common_index](インデックスのFG)は、SQLにインデックスを配置する場所を指示します。この場合、それはクラスター化インデックスであるため、データを強制的に使用します。