2012-05-22 23 views
31

tworzę bazę danych w serwerze SQL 2008bazy danych: klucz podstawowy, skupione lub nieklastrowany

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

Chcę, aby U_Id klucz podstawowy. chciałbym zapytać, jaka jest różnica między

CONSTRAINT pk_UserID PRIMARY KEY (U_Id) 

to

CONSTRAINT pk_UserID PRIMARY KEY CLUSTERED (U_Id) 

i to

CONSTRAINT pk_UserID PRIMARY KEY NONCLUSTERED (U_Id) 

Kiedy stosować każdy?

Przeczytałem artykuł, ale wciąż nie jest dla mnie jasne. Czy ktoś może mi dać szybkie wyjaśnienie?

Odpowiedz

36

następujące oświadczenie:

CONSTRAINT pk_UserID PRIMARY KEY (U_Id) 

jest taki sam jak ten:

CONSTRAINT pk_UserID PRIMARY KEY CLUSTERED (U_Id) 

Można oddać fizyczność dane stół zamawiać tylko przez jednej indeksów i domyślnie, że Indeks jest używany dla klucza podstawowego (ograniczenie klucza podstawowego jest zawsze obsługiwane przez indeks).

Jeśli chcesz zostawić kolejność danych tabeli mają być przechowywane zgodnie z innego indeksu następnie należy utworzyć klucz podstawowy z:

CONSTRAINT pk_UserID PRIMARY KEY NONCLUSTERED (U_Id) 

a następnie utworzyć indeks klastrowany z:

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

Należy pamiętać, że wszystkie indeksy nieklastrowe, które utworzysz, zawsze będą zawierały dane w indeksie klastrowym (ponieważ tak jest znaleziony wiersz danych w tabeli). [Microsoft docs] (http://msdn.microsoft.com/en-us/library/ms177484.aspx) Więc nie myśl, że zaoszczędzisz miejsce, tworząc indeks o dużym/szerokim indeksie klastrowym, chyba że nie ma żadnych innych indeksów na stole. – Granger

+1

Klucz podstawowy to identyfikator wiersza. Musi być unikalny i nie może mieć wartości NULL. Indeks klastrowy informuje SQL o przechowywaniu danych na dysku. Rzeczywiste wiersze danych są przechowywane w kolejności określonej przez ten indeks. Ponieważ zawiera również dane dotyczące miejsca przechowywania danych na dysku, klastrowany klucz indeksu jest przechowywany w każdym indeksie. W prawie wszystkich przypadkach najlepiej jest zrobić to samo. I prawie zawsze najlepiej jest, aby klucz podstawowy był identyfikatorem, aby dane były przechowywane na dysku sekwencyjnie. – brianfeucht