2012-05-22 8 views
31

Ich bin eine Datenbank in SQL Server erstellen 2008Datenbank: Primärschlüssel, gruppierten oder nicht gruppierten

CREATE TABLE Users 
(
    U_Id INT NOT NULL 
    FirstName VARCHAR(50) NOT NULL, 
    LastName VARCHAR(50) NOT NULL, 
    Email VARCHAR(200) 
    Password VARCHAR(50) 
) 

Ich möchte U_Id der Primärschlüssel machen. Ich möchte fragen, was ist der Unterschied zwischen

CONSTRAINT pk_UserID PRIMARY KEY (U_Id) 

diese

CONSTRAINT pk_UserID PRIMARY KEY CLUSTERED (U_Id) 

und diese

CONSTRAINT pk_UserID PRIMARY KEY NONCLUSTERED (U_Id) 

Wenn jeder benutzen?

Ich las einen Artikel, aber es ist mir immer noch unklar. Kann mir jemand eine kurze Erklärung geben?

Antwort

36

folgende Erklärung ab:

CONSTRAINT pk_UserID PRIMARY KEY (U_Id) 

ist die gleiche wie diese:

CONSTRAINT pk_UserID PRIMARY KEY CLUSTERED (U_Id) 

Sie können nur die Tabellendaten Körperlichkeit durch ein der Indizes bestellt haben, und standardmäßig, dass Der Index wird für den Primärschlüssel verwendet (die eindeutige Eindeutigkeit des Primärschlüssels wird immer von einem Index unterstützt).

Wenn Sie die Reihenfolge der Tabellendaten verlassen nach einem anderen Index gespeichert werden, dann sollten Sie den Primärschlüssel mit erstellen:

CONSTRAINT pk_UserID PRIMARY KEY NONCLUSTERED (U_Id) 

und erstellen Sie den Clustered-Index mit:

CREATE CLUSTERED INDEX ix_Email ON Users (Email); 
+3

Beachten Sie, dass alle nicht gruppierten Indizes, die Sie erstellen, immer die Daten im Clustered-Index enthalten (da so die tatsächliche Datenzeile in der Tabelle gefunden wird). [Microsoft docs] (http://msdn.microsoft.com/en-us/library/ms177484.aspx) Denken Sie also nicht, dass Sie Platz sparen, indem Sie einen großen/breiten Index zum Clustered-Index machen, es sei denn, Sie haben keine anderen Indizes auf der Tabelle. – Granger

+1

Primärschlüssel ist der Bezeichner einer Zeile. Es muss eindeutig und nicht null sein. Clustered Index teilt SQL mit, wie Daten auf der Festplatte gespeichert werden. Die tatsächlichen Datenzeilen werden in der Reihenfolge gespeichert, die in diesem Index angegeben ist. Da er auch Daten darüber enthält, wo die Daten auf der Festplatte gespeichert sind, wird der Clustered-Index-Schlüssel in jedem Index gespeichert. In fast allen Fällen ist es am besten, diese gleich zu machen. Und es ist fast immer am besten, wenn der Primärschlüssel eine Kennung ist, damit die Daten sequentiell auf der Festplatte gespeichert werden. – brianfeucht