Per quanto riguarda l'uso delle chiavi sequenziali (come con identità, sequenza e NEWSEQUENTIALID) rispetto a quelle non sequenziali (come con NEWID o un generatore di chiavi randomizzato personalizzato), ci sono diversi aspetti da considerare.
A partire dai tasti sequenziali, tutte le righe vanno nella parte destra dell'indice. Quando una pagina è piena, SQL Server alloca una nuova pagina e la riempie. Ciò si traduce in una minore frammentazione dell'indice, che è vantaggiosa per le prestazioni di lettura. Inoltre, gli inserimenti possono essere più veloci quando una singola sessione sta caricando i dati e i dati si trovano su una singola unità o su un numero limitato di unità.
Tuttavia, con sottosistemi di archiviazione di fascia alta con più mandrini, la situazione può essere diversa.Quando si caricano i dati da più sessioni, si finirà con il conflitto della latch di pagina (i latch sono oggetti utilizzati per sincronizzare l'accesso alle pagine del database) rispetto alle pagine più a destra dell'elenco collegato del livello foglia indice. Questo collo di bottiglia impedisce l'utilizzo dell'intero throughput del sottosistema di archiviazione. Si noti che se si decide di utilizzare i tasti sequenziali e si stanno utilizzando quelli numerici, è sempre possibile iniziare con il valore più basso nel tipo per utilizzare l'intero intervallo. Ad esempio, invece di iniziare con 1 in un tipo INT, potresti iniziare con -2,147,483,648.
Considerare chiavi non sequenziali, come quelle casuali generate con NEWID o con una soluzione personalizzata. Quando si tenta di forzare una riga in una pagina già piena, SQL Server esegue una suddivisione classica della pagina: alloca una nuova pagina e sposta metà delle righe dalla pagina originale a quella nuova. Una divisione di pagina ha un costo, oltre a provocare la frammentazione dell'indice. La frammentazione dell'indice può avere un impatto negativo sulle prestazioni delle letture. Tuttavia, in termini di prestazioni di inserimento, se il sottosistema di archiviazione contiene molti assi e si caricano dati da più sessioni, l'ordine casuale può effettivamente essere migliore del sequenziale nonostante le suddivisioni.
Questo perché non esiste un hot spot all'estremità destra dell'indice e si utilizza il throughput disponibile del sottosistema di memoria . Un buon esempio per un benchmark che mostri questa strategia può essere trovato in un blog di Thomas Kejser allo http://blog.kejser.org/2011/10/05/boosting-insert-speed-by-generating-scalable-keys/.
Fonte: Interrogazione Microsoft® SQL Server® 2012 esame 70-461 Training Kit
Eh? Se sono generati in sequenza Come può essere guarnettato che il GUID generato è in realtà univoco, invece di essere qualcosa che assomiglia a un GUID? – Justin
@Justing - Non esiste * garanzia * che un GUID sia unico, è molto probabile che lo sia. –
I collegamenti sono volatili ... Fotia ora 404s il link nella risposta. –