sql >> Database teknologi >  >> RDS >> Sqlserver

Unik identifikator (guide) som primær nøgle i databasedesign

En 128-bit GUID (uniqueidentifier ) nøglen er selvfølgelig 4x større end en 32-bit int nøgle. Der er dog et par vigtige fordele:

  • Intet "IDENTITY INSERT"-problem ved fletning af indhold
  • Hvis du bruger en COMB-værdi i stedet for NEWSEQUENTIALID(), får du et "gratis" INSERT-tidsstempel. Du kan endda SELECT fra den primære nøgle baseret på et dato-/tidsinterval, hvis du vil med et par smarte CAST() opkald.
  • De er globalt unikke, hvilket viser sig at være ret praktisk nu og da.
  • Da der ikke er behov for at spore højvandsmærker, kan dit BL-lag tildele værdien i stedet for SQL Server, og dermed eliminere trinnet SELECT scope_identity() for at hente den primære nøgle efter en indsættelse.
  • Hvis det overhovedet er muligt, at du kan have mere end 2 milliarder poster, skal du bruge bigint (64 bit) i stedet for int . Når du har gjort det, uniqueidentifier er kun dobbelt så stor som en bigint .
  • Brug af GUID'er gør det mere sikkert at afsløre nøgler i URL'er osv. uden at udsætte dig selv for "gæt-ID"-angreb.
  • Mellem hvordan SQL Server indlæser sider fra disk og hvordan processorer nu for det meste er 64-bit, betyder det ikke, at det tager 4x længere tid at sammenligne, bare fordi et tal er 128 bit i stedet for 32. Den sidste test, jeg så, viste, at GUID'er er næsten lige så hurtige.
  • Indeksstørrelse afhænger af hvor mange kolonner er inkluderet. Selvom GUID'erne selv er større, kan de ekstra 8 eller 12 bytes være ubetydelige sammenlignet med de andre kolonner i indekset.

I sidste ende er det måske ikke værd at presse en lille ydeevnefordel ud ved at bruge heltal at miste fordelene ved en GUID. Test det empirisk og afgør selv.

Personligt bruger jeg stadig begge dele, afhængigt af situationen, men den afgørende faktor er aldrig rigtig kommet ned til ydeevne i mit tilfælde.



  1. Find alle ikke-numeriske værdier i en kolonne i MariaDB

  2. Migrering fra MySQL til PostgreSQL - hvad du bør vide

  3. Top 9 tips til opsætning af din SQL Server-klynge

  4. MS Access til Oracle nem konvertering/migrering