PRIMARY KEYキーワードは、SQL Serverのクラスター化インデックスとどのように関連していますか?
(私が尋ねた別の質問ではなく、この質問に答えたいと思う人もいるようです。そのため、より良い場所を提供しています。)
PRIMARY KEYキーワードは、SQL Serverのクラスター化インデックスとどのように関連していますか?
(私が尋ねた別の質問ではなく、この質問に答えたいと思う人もいるようです。そのため、より良い場所を提供しています。)
PRIMARY KEY
キーワードはMSSqlServerのクラスター化インデックスにどのように関連していますか?
デフォルトでは、aPRIMARY KEY
はクラスター化されたインデックスとして実装されます。ただし、クラスター化されていないインデックスでバックアップすることもできます(NONCLUSTERED
宣言のオプションを指定します)
クラスタ化されたインデックスは必ずしも。ではありませんPRIMARY KEY
。一意でない場合もあります(この場合、呼び出された非表示の列uniqueifier
が各キーに追加されます)。
クラスタ化されたインデックスは実際にはインデックスではないことに注意してください(つまり、元のレコードへの参照を使用して、順序が異なるテーブルの投影)。これはテーブル自体であり、元のレコードが注文されています。
クラスター化されたインデックスを作成する場合、テーブルから切り離すことができるものを実際に「作成」することはありません。テーブル自体を再配置し、レコードの保存方法を変更するだけです。
テーブルのクラスター化インデックスは通常、主キー列で定義されます。
ただし、これは厳密な要件ではありません。
MSDNから:
PRIMARY KEY制約を作成するときに、テーブルにクラスター化インデックスがまだ存在せず、一意の非クラスター化インデックスを指定しない場合、1つまたは複数の列に一意のクラスター化インデックスが自動的に作成されます。
と:
非クラスター化主キー制約が指定されている場合は、主キー列以外の列にクラスター化索引を作成できます。
主キーは、その名前が示すように、テーブル内の行の主な一意の識別子です。クラスタ化されたインデックスは、インデックスに従ってデータを物理的に並べ替えます。SQL Serverはデフォルトで主キーをクラスター化しますが、2つの間に直接の関係はありません。