C'è qualche differenza tangibile tra un indice cluster univoco e una chiave primaria cluster?


17

Comprendo che potrebbe esserci una differenza nel significato o nell'intento tra i due, ma ci sono differenze comportamentali o prestazionali tra una chiave primaria in cluster e un indice univoco in cluster?

Risposte:


15

Una differenza principale è che l'indice univoco può avere un valore NULL non consentito nella chiave primaria. Clustered o no, questa è la differenza principale tra l'implementazione pratica di una chiave primaria rispetto a una chiave univoca.

Oh, e il fatto che un tavolo possa avere un PK e molti UK :-).

Queste sono entrambe differenze in INTENT e non in PERFORMANCE. Altrimenti, non credo ci sia alcuna differenza. Dietro qualsiasi PK o UK, SQL Server crea un indice (a seconda della richiesta, raggruppato o meno) e il modo in cui viene utilizzato è trasparente per l'origine.


Quindi non c'è motivo di usare un PK, tranne (A) come alias per NOT NULL UNIQUE CLUSTEREDo (B) per evidenziare che un determinato UQ è "speciale" in un senso di metadati, anche se RDMS è agnostico?
Jon of All Trades,

Sì, qualcosa del genere, sceglierei l'opzione B da sola :-).
Marian,

C'è un motivo: impedirti di usare il valore speciale NULL dove è inappropriato!
JamesRyan,

@JamesRyan: Questo è coperto dalla ragione #A di Jon of All Trades.
Andriy M,

1
@JamesRyan: Sì, tra PRIMARY KEYe NOT NULL UNIQUE, il primo sarebbe molto più difficile da trasformare NULL UNIQUE( in particolare se il vincolo era già indicato da una chiave esterna). Certamente impedirebbe modifiche accidentali NOT NULLa NULL.
Andriy M,

8

Tra una chiave primaria in cluster e un indice cluster univoco non esiste altro che l'indice cluster univoco possa avere un valore NULL.

Un indice cluster non univoco ha un identificatore univoco che deve essere trattato per valori non univoci.


Vuoi dire che ulteriori indici su quella tabella puntano direttamente alle righe dell'indice cluster ignorando l'indice creato dalla chiave primaria?
bernd_k

1
È corretto. Gli indici non cluster indicheranno la chiave di clustering, non la chiave primaria. Se la chiave primaria è una chiave non cluster, non fa altro che applicare l'univocità su una colonna che non supporta i valori NULL in modo che possa essere utilizzata tramite una chiave esterna.
mrdenny,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.