Die API Ich bin mit Indizes auf einer Tabelle erstellen, um alle nicht gruppierten Indizes als eindeutiger Index erstellt, die den Primärschlüssel enthält.nicht gruppierte Indizes: Unique Index mit Primärschlüssel vs Non-Unique-Index ohne Primärschlüssel
So die folgende Tabelle:
CREATE TABLE Person
(
[PersonID] INT NOT NULL PRIMARY KEY, -- clustered key on this col.
[First Name] VARCHAR(50),
[Last Name] VARCHAR(50),
[Other Columns] VARCHAR(50)
)
Das SQL-Statement für einen nicht gruppierten Index durch die API so etwas erstellt aussieht:
CREATE UNIQUE NONCLUSTERED INDEX KeyName
ON Person ([First Name], [Last Name], [PersonID])
den Primärschlüssel im Index Indem es ist sichergestellt, dass alle Einträge eindeutig sind.
Persönlich würde ich den Index wie folgt geschaffen:
CREATE NONCLUSTERED INDEX KeyName2
ON Person ([First Name], [Last Name])
ich verwendet, um die folgenden statment zweimal auf einem Tisch über 21 Millionen Datensätze enthält. Ich hatte immer nur einen der Indizes aktiv.
SELECT *
FROM Person
WHERE [First Name] = 'John'
AND [Last Name] = 'Doe'
Die "Geschätzte CPU-Kosten", "Geschätzte E/A-Kosten", "Geschätzte Operator Cost" und "Geschätzte Subtree Cost" waren genau die gleichen, egal welchen Index/deaktiviert wurde aktiviert.
Mein Verständnis von nicht gruppierten Indizes ist, dass der Primärschlüssel nicht auf die Daten verwendet wird sowieso abzurufen, aber einige Zeilennummer, die SQL-Server weist unabhängig. Gibt es also irgendwelche Vorteile, den UNIQUE-Index über den NON-UNIQUE-Index zu verwenden?
Ich würde vermuten, dass der UNIQUE-Index mehr Speicherplatz in Anspruch nimmt, da es eine weitere Spalte enthält. Deshalb würde ich die letztere Version bevorzugen.
Verwenden von SQL-Server 2012
[Clustered und Nonclustered-Indizes] (https://docs.microsoft.com/en-us/sql/relational-databases/indexes/clustered-and-nonclustered-indexes-described): "Der Zeiger aus einer Indexzeile In einem Nonclustered-Index für eine Datenzeile wird ein Zeilenlokator genannt. Die Struktur des Zeilenlokalisierers hängt davon ab ... Bei einer Clustered-Tabelle ist der Zeilenlokator der Clustered-Index-Schlüssel. Wenn also Ihr PK gruppiert ist, ist Ihre Annahme, dass der Primärschlüssel nicht zum Abrufen der Daten verwendet wird, falsch. –