Ist es in SQL Server möglich, einen PRIMARY KEY für eine Tabelle ohne CLUSTERED- oder NONCLUSTERED-Indizes für denselben Schlüssel zu haben?

7

Ist es in SQL Server (2008) möglich, eine PRIMARY KEYfür eine Reihe von Spalten ohne CLUSTEREDoder NONCLUSTEREDIndizes für dieselbe Reihe von Spalten zu haben?

Mir ist bewusst, dass PRIMARY KEYund CLUSTERED INDEXkey getrennte Konzepte sind und dass wir PRIMARY KEYohne CLUSTERED INDEXsie erstellen können (siehe unten).

ALTER TABLE dbo.Sample 
ADD CONSTRAINT PK_Sample_SeqGUID_Col1 PRIMARY KEY NONCLUSTERED (SeqGUID_Col1)

Meine Frage ist jedoch, ob es möglich ist, PRIMARY KEYeine Tabelle ohne CLUSTEREDoder mit einem NONCLUSTEREDIndex zu erstellen .

UB01
quelle
Danke Mark für die Bearbeitung. Ich werde diese Punkte für meinen nächsten Beitrag berücksichtigen.
UB01

Antworten:

12

Kurz gesagt, nein. Ein Primärschlüssel erfordert per Definition die Eindeutigkeit. Ein Index für das Primärschlüsselfeld ist der Weg der Datenbankmodule zur Durchsetzung dieser Einschränkung.

Von BOL :

Wenn Sie eine PRIMARY KEY-Einschränkung für eine Tabelle angeben, erzwingt das Datenbankmodul die Eindeutigkeit von Daten, indem ein eindeutiger Index für die Primärschlüsselspalten erstellt wird. Dieser Index ermöglicht auch den schnellen Zugriff auf Daten, wenn der Primärschlüssel in Abfragen verwendet wird. Daher müssen die ausgewählten Primärschlüssel den Regeln zum Erstellen eindeutiger Indizes entsprechen.

Mark Storey-Smith
quelle
8

Nein, eine Primärschlüsseleinschränkung wird in SQL-Server immer durch einen eindeutigen Index erzwungen. Der Index kann gruppiert oder nicht gruppiert sein. Wenn Sie nicht angeben, welcher Typ verwendet werden soll, wird standardmäßig CLUSTEREDder Primärschlüssel verwendet. Aus der MSDN-DokumentationCREATE TABLE :

CLUSTERED | NONCLUSTERED

Geben Sie an, dass für die Einschränkung PRIMARY KEYoder ein Clustered- oder ein Nonclustered-Index erstellt wird UNIQUE. PRIMARY KEYEinschränkungen standardmäßig CLUSTEREDund UNIQUEEinschränkungen standardmäßig NONCLUSTERED.

In einer CREATE TABLEAnweisung CLUSTEREDkann nur für eine Einschränkung angegeben werden. Wenn CLUSTEREDfür eine UNIQUEEinschränkung angegeben wird und auch eine PRIMARY KEYEinschränkung angegeben wird, wird PRIMARY KEYstandardmäßig verwendet NONCLUSTERED.

ypercubeᵀᴹ
quelle