Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server:Gibt NEWID() immer eine eindeutige ID an?

Beide NEWID() und NEWSEQUENTIALID() Geben Sie global eindeutige Werte des Typs eindeutiger Bezeichner .

NEWID() beinhaltet zufällige Aktivitäten, daher ist der nächste Wert unvorhersehbar und langsamer auszuführen.

NEWSEQUENTIALID() beinhaltet keine zufällige Aktivität, daher kann der nächste generierte Wert vorhergesagt werden (nicht einfach!) und wird schneller ausgeführt als NEWID() .

Wenn Sie also (aus Sicherheitsgründen) nicht besorgt sind, dass der nächste Wert vorhergesagt wird, können Sie NEWSEQUENTIALID() verwenden . Wenn Sie sich Sorgen um die Vorhersagbarkeit machen oder Ihnen die kleine Leistungseinbuße nichts ausmacht, können Sie NEWID() verwenden .

Streng genommen besteht jedoch immer noch eine vernachlässigbare Wahrscheinlichkeit, dass GUIDs, die von verschiedenen Computern generiert werden, den gleichen Wert haben. In der Praxis gilt dies als unmöglich.

Wenn Sie weitere Informationen wünschen, lesen Sie dies:Welche Methode zum Generieren von GUIDs ist am besten, um sicherzustellen, dass die GUID wirklich einzigartig ist?

Beachten Sie NEWID() entspricht RFC 4122 . Und die andere Funktion verwendet einen Microsoft-Algorithmus zum Generieren des Werts.