7

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

したがって、上記のことから、主キー以外の列にクラスター化インデックスを作成できます。

また、主キーは非クラスター化主キーまたはクラスター化キーのいずれかである必要があることも伝えていると思います。主キーがインデックス化されていない可能性はありますか?

そのうえ:

UNIQUE 制約を作成すると、一意の非クラスター化インデックスが作成され、既定で UNIQUE 制約が適用されます。テーブルにクラスター化インデックスがまだ存在しない場合は、一意のクラスター化インデックスを指定できます。

これは、一意の制約によってクラスター化インデックスまたは非クラスター化インデックスを作成する必要があるということですか?

4

2 に答える 2

14

主キーがインデックス化されていない可能性はありますか?

いいえ、ちがいます。

をポリシングするには、ある種のインデックスが必要ですPRIMARY KEY。それ以外の場合は、(一意性を確保するために) 挿入ごとにテーブル全体をスキャンする必要があります。

ドキュメントから:

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


これは、一意の制約によってクラスター化インデックスまたは非クラスター化インデックスを作成する必要があるということですか?

はい、同じ理由で。


PRIMARY KEYUNIQUEは論理的な概念ですが、インデックスにはそれらを効率的に実装するという副作用があります。ですから、厳密に言えば、ALTER TABLE ADD CONSTRAINT UNIQUE意味CREATE UNIQUE INDEXが異なります。

将来、パウリの原理や量子エンタングルメントなどを使用して物理レベルで一意性を強制する方法を発明した優秀な頭脳があれば、SQL Server 2155それを使用して制約を強制することができますが、それでもインデックス用の B ツリーを作成する必要があります。 .

于 2012-05-18T19:18:04.363 に答える
1

簡単な答え: いいえ、

SQL Server のすべてのテーブルには、クラスター化インデックスが 1 つだけある必要があります。その他のインデックス (非クラスター化) は、クラスター化インデックスから使用します。通常、主キーはクラスター化インデックスです。ただし、外部キーとは異なり、主キーは常にインデックス化されます。

http://www.sqlfiddle.com/#!6/972f0/1
于 2012-05-18T19:29:47.183 に答える