Pytanie w sprawie primary-key, sql-server-2008, database, clustered-index – baza danych: klucz podstawowy, klastrowany lub nieklastrowany

34

Tworzę bazę danych na serwerze SQL 2008,

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 był kluczem podstawowym. 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 używać każdego?

Przeczytałem jakiś artykuł, ale nadal nie jest dla mnie jasne. Czy ktoś może mi szybko wyjaśnić?

Twoja odpowiedź

1   odpowiedź
40

Poniższe oświadczenie:

CONSTRAINT pk_UserID PRIMARY KEY (U_Id)

Jest taki sam jak ten:

CONSTRAINT pk_UserID PRIMARY KEY CLUSTERED (U_Id)

Można zamówić tylko fizyczność danych tabeli wedługjeden indeksów i domyślnie ten indeks jest używany dla klucza podstawowego (unikatowe ograniczenie klucza podstawowego jest zawsze obsługiwane przez indeks).

Jeśli chcesz, aby kolejność danych tabeli była przechowywana zgodnie z innym indeksem, powinieneś utworzyć klucz podstawowy za pomocą:

CONSTRAINT pk_UserID PRIMARY KEY NONCLUSTERED (U_Id)

Następnie utwórz indeks klastrowany za pomocą:

CREATE CLUSTERED INDEX ix_Email ON Users (Email); 
Klucz podstawowy to identyfikator wiersza. Musi być unikalny i nie zerowy. Indeks klastrowany informuje SQL, jak przechowywać dane na dysku. Rzeczywiste wiersze danych są przechowywane w kolejności określonej przez ten indeks. Ponieważ zawiera również dane o tym, gdzie dane są przechowywane na dysku, klucz indeksu klastrowego jest przechowywany w każdym indeksie. W prawie wszystkich przypadkach najlepiej jest, aby były takie same. I prawie zawsze najlepiej jest mieć klucz podstawowy jako identyfikator, aby dane były przechowywane na dysku kolejno. brianfeucht
Należy tylko pamiętać, że tworzone przez użytkownika indeksy nieklastrowane zawsze zawierają dane w indeksie klastrowym (ponieważ w ten sposób znajduje się rzeczywisty wiersz danych w tabeli).Dokumenty Microsoft  Więc nie myśl, że oszczędzasz miejsce, tworząc indeks duży / szeroki jako indeks klastrowy, chyba że nie masz żadnych innych indeksów w tabeli. Granger

Powiązane pytania