5

Sie können einen Clustered-Index für eine andere Spalte als die Primärschlüsselspalte erstellen, wenn eine Nonclustered-Primärschlüsseleinschränkung angegeben wurde. http://msdn.microsoft.com/en-us/library/ms186342.aspxPrimärschlüssel wird immer in SQL Server indiziert?

mir So sagte der oben: Ich habe einen gruppierten Index für Spalten andere als der Primärschlüssel erstellen können.

Ich denke, es vermittelt auch, dass ein Primärschlüssel entweder ein Nonclustered-Primärschlüssel oder ein Clusterschlüssel sein sollte. Ist es möglich, dass ein Primärschlüssel nicht indexiert ist?

Was mehr ist:

Wenn Sie eine UNIQUE-Einschränkung erstellen, ein einzigartiger nicht gruppierten Index ist eine eindeutige Einschränkung standardmäßig zu erzwingen erstellt. Sie können einen eindeutigen gruppierten Index angeben, wenn ein gruppierter Index für die Tabelle nicht bereits vorhanden ist.

Bedeutet dies, dass eine eindeutige Integritätsbedingung einen gruppierten Index oder einen nicht gruppierten Index erstellen muss?

Antwort

12

Ist es möglich, dass ein Primärschlüssel nicht indiziert ist?

Nein, ist es nicht.

Eine Art eines Indexes wird die PRIMARY KEY die Polizei erforderlich, sonst wäre es auf jedem Einsatz des Scannen die gesamte Tabelle erfordert (Eindeutigkeit zu gewährleisten).

Vom docs:

Die Database Engine erstellt automatisch einen eindeutigen Index der Einzigartigkeit Anforderung der PRIMARY KEY Einschränkung zu erzwingen. Wenn ein gruppierter Index nicht bereits in der Tabelle vorhanden ist oder ein nicht gruppierter Index nicht explizit angegeben wird, wird ein eindeutiger gruppierter Index erstellt, der die PRIMARY KEY-Einschränkung erzwingt.


Bedeutet dies eine eindeutige Einschränkung einen gruppierten Index oder einen nicht gruppierten Index erstellen hat?

Ja, aus den gleichen Gründen.


PRIMARY KEY und UNIQUE sind logische Konzepte, während der Index nur eine Nebenwirkung hat sie effizient umzusetzen. Also, genaugenommen bedeuten ALTER TABLE ADD CONSTRAINT UNIQUE und CREATE UNIQUE INDEX verschiedene Dinge.

Wenn in der Zukunft ein heller Kopf einen Weg findet, das Pauli-Prinzip oder die Quantenverschränkung zu verwenden oder um die Eindeutigkeit auf physikalischer Ebene zu erzwingen, kann SQL Server 2155 sie anwenden, um die Einschränkung durchzusetzen, aber sie muss immer noch B erzeugen -Baum für den Index.

+1

Ich denke, die Antwort könnte irreführend basierend auf dem Titel der Frage sein. Die Antwort lautet YES a pk wird immer indiziert. – JonH

+0

Viel besser danke. – JonH

1

Kurze Antwort: Nein,

Jede Tabelle in SQL Server sollte nur ein Clustered-Index haben. Andere Indizes (nicht gruppiert) werden vom Clustered-Index verwendet.Primärschlüssel ist häufig Clustered-Index. Aber Primärschlüssel wird immer anders als Fremdschlüssel indiziert.

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

* Jede Tabelle ... sollte nur einen Clustered-Index * haben - jede Tabelle kann ** NIEMALS ** mehr als einen Clustered-Index haben! Es ist nicht eine * sollte nicht * Einschränkung - es ist eine feste ** CAN NOT ** Einschränkung. Es gibt keine Möglichkeit mehr als einen Clustered-Index zu haben. –