sql >> Database >  >> RDS >> Sqlserver

Is het beter om een ​​uniqueidentifier (GUID) of een bigint te gebruiken voor een identiteitskolom?

Dat hangt af van wat je doet:

  • Als snelheid de belangrijkste zorg is, dan is een gewone oude int is waarschijnlijk groot genoeg.
  • Als je echt meer dan 2 miljard (met een B;) ) records hebt, gebruik dan bigint of een sequentiële gids.
  • Als u gemakkelijk wilt kunnen synchroniseren met records die op afstand zijn gemaakt, dan Guid is echt geweldig.

Bijwerken
Enkele aanvullende (minder voor de hand liggende) opmerkingen over gidsen:

  • Ze kunnen moeilijk zijn voor indexen, en dat raakt de kern van de databaseprestaties
  • Je kunt sequentiële richtlijnen gebruiken om een ​​deel van de indexeringsprestaties terug te krijgen, maar geef een deel van de willekeur op die in punt twee wordt gebruikt.
  • Guids kunnen moeilijk handmatig te debuggen zijn (where id='xxx-xxx-xxxxx' ), maar je krijgt er ook een deel van terug via sequentiële gidsen (where id='xxx-xxx' + '123' ).
  • Om dezelfde reden kunnen Guids ID-gebaseerde beveiligingsaanvallen moeilijker maar niet onmogelijk maken. (Je kunt niet zomaar 'http://example.com?userid=xxxx' typen en verwacht een resultaat te krijgen voor het account van iemand anders).


  1. MySQL:SUM() met JOIN retourneert onjuiste waarden

  2. Controleer of er een tabelkolom in de database bestaat met behulp van SQLAlchemy en Alembic

  3. SQL-query traag in .NET-toepassing maar onmiddellijk in SQL Server Management Studio

  4. Oracle PL/SQL Tabellen maken in cursor?