Abbiamo un database in cui tutti i PK sono GUID e la maggior parte dei PK è anche l'indice cluster per la tabella. Sappiamo che questo è sbagliato (a causa della natura casuale dei GUID). Quindi, sembra che ci siano fondamentalmente due opzioni qui (a meno di buttare fuori GUID come PK del tutto, cosa che non possiamo fare (almeno non in questo momento)).Database SQL Server con PID GUID con cluster: cambiare indice cluster o passare a GUID sequenziali (comb)?
- È possibile modificare l'algoritmo di generazione GUID ad es. quello che usa NHibernate, come descritto in this post, o
- , potremmo, per le tabelle che sono sotto l'uso più pesante, passare a un altro indice cluster, ad es. una colonna IDENTITY e mantenere i GUID "casuali" come PK.
È possibile fornire raccomandazioni generali in tale scenario?
L'applicazione in questione ha più di 500 tabelle, la più grande attualmente a circa 1,5 milioni di righe, alcuni tavoli intorno a 500 000 righe e il resto significativamente più basso (la maggior parte di essi ben al di sotto di 10 K).
Inoltre, l'applicazione è già installata in diversi siti di clienti, pertanto è necessario prendere in considerazione eventuali effetti negativi per i clienti esistenti.
Grazie!
Grazie per la risposta. Solo un rapido commento/chiarimento: non mi interessa l'indeterminatezza dei GUID, solo la loro unicità attraverso le installazioni. – Eyvind
Quindi, la semplice modifica dei guids ai GUID sequenziali come NEWSEQUENTIALID() in SQL Server risolverà la maggior parte dei tuoi problemi immediati. Tuttavia, non rimandare un fattore di risarcimento completo in un'Identità più del necessario. –
Quindi, dato che optiamo per i GUID sequenziali: per quanto riguarda i clienti con 100K di righe in molte tabelle, un tale cambiamento ne trarrà beneficio, o la situazione sarà altrettanto grave come lo è oggi, dal momento che le tabelle e gli indici sono già pieno di dati "casuali"? – Eyvind