Czy istnieje jakaś namacalna różnica między unikalnym indeksem klastrowym a klastrowanym kluczem podstawowym?

17

Rozumiem, że może istnieć różnica w znaczeniu lub zamiarze między nimi, ale czy są jakieś różnice w zachowaniu lub wydajności między klastrowanym kluczem podstawowym a klastrowanym unikalnym indeksem?

goric
źródło

Odpowiedzi:

15

Jedną z głównych różnic jest to, że unikalny indeks może mieć wartość NULL, która nie jest dozwolona w kluczu podstawowym. Zgrupowane czy nie, jest to główna różnica między praktyczną implementacją klucza podstawowego a kluczem unikalnym.

Aha, i fakt, że stół może mieć jedną PK i wiele UK :-).

Są to obie różnice w INTENT, a nie w PERFORMANCE. W przeciwnym razie nie sądzę, żeby była jakaś różnica. Za dowolną PK lub Wielką Brytanią SQL Server buduje indeks (w zależności od żądania, klastrowany lub nie), a sposób jego użycia jest przezroczysty dla źródła, z którego pochodzi.

Marian
źródło
Więc nie ma powodu, aby używać PK, z wyjątkiem (A) jako aliasu NOT NULL UNIQUE CLUSTEREDlub (B), aby podkreślić, że określony UQ jest „specjalny” w sensie metadanych, nawet jeśli RDMS jest agnostyczny?
Jon of All Trades
Tak, coś takiego, sam wybrałbym opcję B :-).
Marian
Jest powód - aby przestać używać specjalnej wartości NULL, gdy jest to nieodpowiednie!
JamesRyan
@JamesRyan: Omówił to powód Jon of All Trades #A.
Andriy M
1
@JamesRyan: Tak, między PRIMARY KEYi NOT NULL UNIQUE, tym pierwszym byłoby znacznie trudniej się zamienić NULL UNIQUE(szczególnie jeśli ograniczenie było już przywoływane przez klucz obcy). Z pewnością zapobiegnie przypadkowym zmianom z NOT NULLna NULL.
Andriy M.
8

Pomiędzy klastrowanym kluczem podstawowym a unikalnym indeksem klastrowym nie ma nic innego niż unikalny indeks klastrowany może mieć wartość NULL.

Nieunikalny indeks klastrowy ma unikalizator, z którym należy postępować w przypadku wartości nieunikalnych.

mrdenny
źródło
Czy masz na myśli, że dalsze indeksy w tej tabeli wskazują bezpośrednio na wiersze w indeksie klastrowym, ignorując indeks utworzony przez klucz podstawowy?
bernd_k,
1
To jest poprawne. Indeksy nieklastrowane będą wskazywać na klucz klastrowania, a nie klucz podstawowy. Jeśli klucz podstawowy jest kluczem nieklastrowanym, wymusza unikalność w kolumnie, która nie obsługuje wartości NULL, dzięki czemu można go użyć za pomocą klucza obcego.
mrdenny,