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?

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.


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.


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,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.