Domanda

Ho una tabella di collegamento nel mio database di SQL Server 2005 che consistono di due colonne:

  • object_id (di tipo uniqueidentifier)

  • property_id (intero)

Questi valori, insieme, creano un composto chiave primaria.

Qual è il modo migliore per creare questo PK indice per SELEZIONARE le prestazioni?

Se le colonne sono state due numeri interi, semplicemente vorrei utilizzare un composto di indice cluster (impostazione predefinita).Tuttavia, ho sentito dire cose cattive su di indici cluster quando uniqueidentifiers sono coinvolti.

Qualcuno ha esperienza con questa situazione?

È stato utile?

Soluzione

Sì, GUID sono davvero male per gli indici cluster, dato che il Guid è da un design molto casuale, e quindi, di enorme frammentazione e, quindi, problemi di prestazioni.

Kim Tripp blog e, in particolare,"L'Indice Cluster Dibattito continua"e "Guid PRIMARIA e/o chiave CLUSTER"per un sacco di preziose informazioni.

Se si ha realmente bisogno di avere un indice su queste DUE colonne, io suggerirei di un indice non cluster - può essere un indice primario - meglio non di un indice cluster.

Marc

Altri suggerimenti

Un'alternativa è utilizzare ciò che è noto come una chiave surrogata (che, per inciso, può anche essere assegnato come chiave primaria).

Per esempio, l'aggiunta di una colonna di identità che può essere utilizzato per identificare in modo univoco ogni riga all'interno della tabella, cioèuna chiave primaria.

Capire che un GUID che viene utilizzato per identificare un record a livello globale all'interno di SQL Server (che probabilmente non è una relazionale corretto pratica, tuttavia, questo non è un problema per noi, qui).

La colonna di identità, ora anche una chiave primaria può/si dispone di un indice cluster applicata.Separata, indice non cluster può quindi essere applicato il composto chiave descritto da poster originale.

Questa pratica evita il problema di frequenti divisioni di pagina che si verificano all'interno dell'indice cluster (inserisce in un casuale GUID chiave primaria) e la realizzazione di un più piccolo e più efficiente indice cluster, preservando le relazioni definite all'interno del database.

Chiave Surrogata Definizione: http://en.wikipedia.org/wiki/Surrogate_key

Io vorrei creare una colonna identity & poi fanno di questa la chiave primaria & indice cluster.È quindi possibile creare indici non cluster su objectid propertyid come necessario.

È possibile creare un unico vincolo per garantire l'univocità della chiave.

La ragione di questo è che le righe verranno inseriti in sequenza, in modo che il vostro riducendo la pagina si divide.in aggiunta, utilizzando un numero intero per la tua PK significa avere un valore più piccolo per il vostro indice cluster.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top