2012-05-22 20 views
31

Io sono la creazione di un database in SQL Server 2008,database: chiave primaria, cluster o non cluster

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

Voglio fare U_Id la chiave primaria. Vorrei chiedere quale è la differenza tra

CONSTRAINT pk_UserID PRIMARY KEY (U_Id) 

questo

CONSTRAINT pk_UserID PRIMARY KEY CLUSTERED (U_Id) 

e questo

CONSTRAINT pk_UserID PRIMARY KEY NONCLUSTERED (U_Id) 

Quando utilizzare ciascuna?

Ho letto qualche articolo ma non mi è ancora chiaro. Qualcuno può darmi una spiegazione veloce?

risposta

36

la seguente dichiarazione:

CONSTRAINT pk_UserID PRIMARY KEY (U_Id) 

è lo stesso di questo:

CONSTRAINT pk_UserID PRIMARY KEY CLUSTERED (U_Id) 

Si può solo avere la fisicità dati della tabella ordinata dal uno degli indici, e di default che indice è quello utilizzato per la chiave primaria (il vincolo univoco della chiave primaria è sempre supportato da un indice).

Se si desidera lasciare l'ordine dei dati della tabella da memorizzare in base a qualche altro indice allora si dovrebbe creare la chiave primaria con:

CONSTRAINT pk_UserID PRIMARY KEY NONCLUSTERED (U_Id) 

e quindi creare l'indice cluster con:

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

Ricorda che tutti gli indici non in cluster creati includeranno sempre i dati nell'indice cluster (perché è così che viene trovata la riga di dati effettiva nella tabella). [Microsoft docs] (http://msdn.microsoft.com/en-us/library/ms177484.aspx) Quindi non pensare di risparmiare spazio facendo un indice grande/ampio dell'indice cluster a meno che tu non avere altri indici sul tavolo – Granger

+1

Chiave primaria è l'identificativo di una riga. Deve essere unico e non nullo. Indice raggruppato indica a SQL come memorizzare i dati sul disco. Le righe di dati effettive vengono memorizzate nell'ordine specificato da questo indice. Poiché contiene anche dati su dove i dati sono archiviati su disco, la chiave indice cluster è memorizzata in ogni indice. In quasi tutti i casi è meglio renderli uguali. Ed è quasi sempre meglio avere la chiave primaria come identificativo in modo che i dati vengano memorizzati sul disco in modo sequenziale. – brianfeucht

Problemi correlati