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

Ist es besser, einen Uniqueidentifier (GUID) oder einen Bigint für eine Identitätsspalte zu verwenden?

Das hängt davon ab, was Sie tun:

  • Wenn Geschwindigkeit das Hauptanliegen ist, dann ein einfaches altes int ist wahrscheinlich groß genug.
  • Wenn Sie wirklich mehr als 2 Milliarden (mit einem B;) ) Datensätze haben werden, dann verwenden Sie bigint oder eine sequentielle Anleitung.
  • Wenn Sie in der Lage sein müssen, mit entfernt erstellten Datensätzen einfach zu synchronisieren, dann Guid ist wirklich toll.

Aktualisieren
Einige zusätzliche (weniger offensichtliche) Anmerkungen zu Guids:

  • Sie können Indizes stark belasten, und das beeinträchtigt die Datenbankleistung erheblich
  • Sie können sequentielle Guids verwenden, um einen Teil der Indizierungsleistung zurückzugewinnen, aber etwas von der in Punkt 2 verwendeten Zufälligkeit aufgeben.
  • Guids können schwer von Hand zu debuggen sein (where id='xxx-xxx-xxxxx' ), aber Sie erhalten einiges davon auch über sequentielle Guids zurück (where id='xxx-xxx' + '123'). ).
  • Aus dem gleichen Grund können Guids ID-basierte Sicherheitsangriffe erschweren, aber nicht unmöglich machen. (Sie können nicht einfach 'http://example.com?userid=xxxx' eingeben und erwarten, ein Ergebnis für das Konto einer anderen Person zu erhalten).