Io personalmente uso INT IDENTITY
per la maggior parte delle mie chiavi primarie e di clustering.
è necessario tenere a parte la chiave primaria che è un costrutto logico - si identifica in modo univoco le righe, deve essere unico e stabile e NOT NULL
. Un GUID funziona bene anche per una chiave primaria, poiché è garantito che sia unico. Un GUID come chiave primaria è una buona scelta se si utilizza la replica di SQL Server, poiché in tal caso è necessaria comunque una colonna GUID che identifichi univocamente.
La chiave di cluster in SQL Server è un costrutto fisico utilizzato per l'ordinamento fisico dei dati ed è molto più difficile da ottenere. In genere, il Queen of Indexing su SQL Server, Kimberly Tripp, richiede anche una buona chiave di clustering per essere uniqe, stabile, il più stretto possibile e idealmente in continua crescita (tutto ciò che è uno INT IDENTITY
).
vederla articoli su indicizzazione qui:
e anche vedere di Jimmy Nilsson The Cost of GUIDs as Primary Key
Un GUID è una orribilmente cattiva scelta per un cluste suoneria, poiché è ampia, totalmente casuale, e quindi porta a una frammentazione dell'indice scadente e prestazioni scadenti. Inoltre, le righe chiave di clustering sono anche memorizzate in ogni singola voce di ogni singolo indice (aggiuntivo) non cluster, quindi si vuole davvero mantenerlo piccolo - GUID è 16 byte vs. INT è 4 byte, e con diversi indici non cluster e diversi milioni di righe, questo fa una grande differenza.
In SQL Server, la chiave primaria è per impostazione predefinita la chiave di clustering, ma non è necessario. È possibile utilizzare facilmente un GUID come chiave primaria NON in cluster e uno INT IDENTITY
come chiave di clustering - richiede solo un po 'di consapevolezza.
fonte
2012-03-15 21:37:22
I maggiori problemi di prestazioni e di frammentazione con un 'UNIQUEIDENTIFIER' arriveranno se si esegue il PK su un indice cluster – Lamak
quindi è importante, è vero che dire sempre usa int piuttosto che guid come pk allora? Perché tutti usano Guid allora? –
dai un'occhiata a questo link per vedere gli effetti sulla frammentazione che usano 'UNIQUEIDENTIFIER' http://www.sqlskills.com/blogs/paul/post/Can-GUID-cluster-keys-cause-non-clustered-index- frammentazione.aspx. D'altra parte, raramente qualcuno usa 'UNIQUEIDENTIFIER' su un indice cluster – Lamak