web-dev-qa-db-ja.com

別のファイルグループにテーブルの主キーを作成するとどうなりますか?

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つの別々のファイルグループでそれらを定義するのに機能するのですか?

主キーが削除されて別のファイルグループに再作成されると、保存されているデータはどうなりますか?

3
Staeff

実際には、クラスター化インデックスと非クラスター化インデックスがすべてです。主キーはそれとは何の関係もありません。クラスタ化インデックスISデータ。実際のテーブルデータは、クラスタ化インデックスのデータページに含まれています。

テーブルにクラスター化インデックスを配置すると、クラスター化インデックスを指定する場所にデータが格納されます。上記のコードを非クラスター化主キーに変更した場合、データは[common_data]にあり(実際にはヒープです)、主キーの非クラスター化インデックスは[common_index]にあります。次に、クラスター化インデックスを作成し、それを[uncommon_data]にポイントすると、テーブルデータは新しいファイルグループに移動され、[common_data]には何も残りません。

ああ、2つの異なるファイルグループを指定できる理由は、構文の2つの異なる部分で作業しているためです。 ON [common_data](テーブルのFG)は、SQLにテーブルを配置する場所を指示します。 ON [common_index](インデックスのFG)は、SQLにインデックスを配置する場所を指示します。この場合、それはクラスター化インデックスであるため、データを強制的に使用します。

3
Kenneth Fisher