15

Uno dei miei collaboratori ha l'impressione che quando si aggiunge un indice a una tabella in SQL Server 2008 anche l'indice PK venga aggiunto a tale indice. Pertanto, se si utilizza una chiave primaria più ampia, tale chiave verrà inclusa nel nuovo indice aumentando notevolmente lo spazio su disco utilizzato oltre la penalità già pagata per l'indice sul PK. Non l'avevo mai sentito prima e la mia ricerca finora è venuta a mancare.Gli indici server Sql includono la chiave primaria?

Speriamo che qualcuno qui possa indicarmi i documenti pertinenti per confermare o negare questo. Per favore?

risposta

27

Il tuo collaboratore sta confondendo "Chiave primaria" con "chiave indice cluster" (probabilmente perché per impostazione predefinita un PK creato su un heap senza specificare la parola chiave nonclustered diventa l'indice cluster della tabella).

It is true che su una tabella con un indice cluster il valore della chiave di indice cluster verrà aggiunto come colonna inclusa a tutti gli indici non cluster per fungere da localizzatore di riga. (sebbene le colonne non verranno aggiunte due volte se sono già parte della definizione dell'indice non cluster).

La chiave di indice cluster ideale è

  • unico (A fare da un localizzatore fila deve essere unico - SQL Server aggiungerà un uniquifier se non lo è)
  • stretto (come è riprodotta in tutti gli indici non cluster)
  • statica (Evitare di dover aggiornare il valore in più posti diversi)
  • sempre crescente
+0

Sì buste d il libro di SQL Server Internals pronto per l'uso. RTFM sembra sempre aiutare a non farlo mai. In ogni caso questo era tutto parte del GUID rispetto a INT come chiave primaria/in cluster. INFIAMMA! – Grummle