5

ノンクラスター化された主キー制約が指定されている場合、主キー列以外の列にクラスタード・インデックスを作成できます。 http://msdn.microsoft.com/en-us/library/ms186342.aspxプライマリキーは常にSQL Serverでインデックスされますか?

私は主キー以外の列にクラスタードインデックスを作成できます。

プライマリキーは、非クラスタ化プライマリキーまたはクラスタ化キーのいずれかである必要があります。主キーが索引付けされていない可能性はありますか?

は、さらに重要なこと:あなたがUNIQUE制約を作成すると

、ユニークな非クラスタ化インデックスは、デフォルトでUNIQUE制約を強制するために作成されます。テーブルのクラスタ化インデックスが存在しない場合は、一意のクラスタ化インデックスを指定できます。

これは、クラスタ化インデックスまたはノンクラスタードインデックスを作成する際に固有の制約が必要であることを意味しますか。

答えて

12

プライマリキーがインデックスに登録されていない可能性はありますか?

いいえ、そうではありません。

PRIMARY KEYを警察するには何らかの種類の索引が必要です。そうしないと、一意性を保証するために各挿入部の表全体をスキャンする必要があります。 docsから

データベースエンジンは自動的にPRIMARY KEY制約の一意性の要件を強制する一意のインデックスを作成します。クラスタ化インデックスがテーブルに存在しない場合、または非クラスタ化インデックスが明示的に指定されていない場合、一意のクラスタ化インデックスが作成され、PRIMARY KEYという制約が適用されます。


これは、固有の制約がクラスタ化インデックスまたは非クラスタ化インデックスを作成するために持っているということですか?

はい、同じ理由からです。インデックスはちょうどそれらを効率的に実装するの副作用を有している


PRIMARY KEYUNIQUEは、論理的な概念です。したがって、厳密に言えば、ALTER TABLE ADD CONSTRAINT UNIQUECREATE UNIQUE INDEXは異なることを意味します。

将来的には、パウリの原理または量子エンタングルメントを使用する方法や、物理レベルで一意性を強制する方法を発明する人がいる場合は、SQL Server 2155がそれを使用して制約を実施することがありますが、インデックス用のツリー。

+1

質問のタイトルに基づいて回答が誤解を招く可能性があります。答えは「はい」です.pkは常に索引付けされています。 – JonH

+0

よろしくお願いいたします。 – JonH

1

短答:いいえ、

SQL Serverの各テーブルには、クラスタ化インデックスが1つだけ必要です。他のものは、クラスタード・インデックスからの(非クラスター化された)使用を索引付けします。主キーはクラスタ化されたインデックスです。しかし、プライマリキーは常に外部キーとは異なりインデックスが付けられます。

http://www.sqlfiddle.com/#!6/972f0/1 
+0

*すべてのテーブル...クラスタ化されたインデックスは1つだけでなければなりません* - 各テーブルは**複数のクラスター化インデックスを持つことはできません! *制限するべきではありません - 固定**です**制限はありません。複数のクラスタード・インデックスを持つ方法はありません。 –

関連する問題