Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL Server:NEWID() fornisce sempre un ID univoco?

Entrambi NEWID() e NEWSEQUENTIALID() fornire valori univoci a livello globale di tipo uniqueidentifier .

NEWID() implica un'attività casuale, quindi il valore successivo è imprevedibile ed è più lento da eseguire.

NEWSEQUENTIALID() non comporta attività casuali, quindi è possibile prevedere il prossimo valore generato (non facilmente!) ed è più veloce di NEWID() .

Quindi, se non sei preoccupato per il prossimo valore previsto (per motivi di sicurezza), puoi utilizzare NEWSEQUENTIALID() . Se sei preoccupato per la prevedibilità o non ti dispiace la piccola penalizzazione delle prestazioni, puoi utilizzare NEWID() .

Tuttavia, in senso stretto, ci sono ancora possibilità trascurabili che i GUID generati da macchine diverse abbiano lo stesso valore. In pratica, è considerato impossibile.

Se desideri ulteriori informazioni, leggi questo:Quale metodo per generare i GUID è il migliore per garantire che il GUID sia davvero unico?

Nota NEWID() conforme a RFC 4122 . E l'altra funzione utilizza un algoritmo di Microsoft per generare il valore.