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

Eindeutiger Bezeichner (GUID) als Primärschlüssel im Datenbankdesign

Eine 128-Bit-GUID (uniqueidentifier ) Schlüssel ist natürlich 4x größer als ein 32-Bit int Schlüssel. Es gibt jedoch einige entscheidende Vorteile:

  • Kein "IDENTITY INSERT"-Problem beim Zusammenführen von Inhalten
  • Wenn Sie anstelle von NEWSEQUENTIALID() einen COMB-Wert verwenden, erhalten Sie einen "kostenlosen" INSERT-Zeitstempel. Sie können sogar SELECT vom Primärschlüssel basierend auf einem Datums-/Zeitbereich, wenn Sie möchten, mit ein paar ausgefallenen CAST() Anrufe.
  • Sie sind weltweit einzigartig, was sich hin und wieder als ziemlich praktisch herausstellt.
  • Da Hochwassermarken nicht nachverfolgt werden müssen, kann Ihr BL-Layer den Wert anstelle von SQL Server zuweisen, wodurch der Schritt SELECT scope_identity() entfällt um den Primärschlüssel nach einer Einfügung zu erhalten.
  • Wenn es auch nur im Entferntesten möglich ist, dass Sie mehr als 2 Milliarden Datensätze haben könnten, müssen Sie bigint verwenden (64 Bit) statt int . Sobald Sie das getan haben, uniqueidentifier ist nur doppelt so groß wie ein bigint .
  • Die Verwendung von GUIDs macht es sicherer, Schlüssel in URLs usw. offenzulegen, ohne sich "Errate-die-ID"-Angriffen auszusetzen.
  • Zwischen der Art und Weise, wie SQL Server Seiten von der Festplatte lädt, und der Tatsache, dass Prozessoren jetzt hauptsächlich 64-Bit-Prozessoren sind, bedeutet dies nicht, dass ein Vergleich viermal länger dauert, nur weil eine Zahl 128 Bit statt 32 Bit hat. Der letzte Test, den ich gesehen habe, hat gezeigt, dass GUIDs fast genauso schnell sind.
  • Die Indexgröße hängt davon ab, wie viele Spalten sind enthalten. Auch wenn die GUIDs selbst größer sind, können die zusätzlichen 8 oder 12 Byte im Vergleich zu den anderen Spalten im Index unbedeutend sein.

Am Ende lohnt es sich vielleicht nicht, die Vorteile einer GUID zu verlieren, wenn Sie durch die Verwendung von Ganzzahlen einen kleinen Leistungsvorteil herausholen. Testen Sie es empirisch und entscheiden Sie selbst.

Ich persönlich nutze je nach Situation immer noch beides, aber entscheidend war bei mir nie wirklich die Performance.