Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

SQL Server :NEWID() donne-t-il toujours un identifiant unique ?

Les deux NEWID() et NEWSEQUENTIALID() donner des valeurs globalement uniques de type uniqueidentifier .

NEWID() implique une activité aléatoire, la valeur suivante est donc imprévisible et son exécution est plus lente.

NEWSEQUENTIALID() n'implique pas d'activité aléatoire, donc la prochaine valeur générée peut être prédite (pas facilement !) et s'exécute plus rapidement que NEWID() .

Donc, si vous n'êtes pas préoccupé par la prédiction de la prochaine valeur (pour des raisons de sécurité), vous pouvez utiliser NEWSEQUENTIALID() . Si vous êtes préoccupé par la prévisibilité ou si la petite pénalité de performance ne vous dérange pas, vous pouvez utiliser NEWID() .

Cependant, au sens strict, il y a encore peu de chances que les GUID générés par différentes machines aient la même valeur. En pratique, c'est considéré comme impossible.

Si vous voulez plus d'informations, lisez ceci :Quelle méthode de génération de GUID est la meilleure pour garantir que le GUID est vraiment unique ?

Remarque NEWID() est conforme RFC 4122 . Et l'autre fonction utilise un algorithme de Microsoft pour générer la valeur.