2013-05-13 20 views
8

In che modo il GUID è memorizzato e confrontato internamente da SQL (in particolare MS SQL Server 2008)? È un numero o una stringa? Inoltre, c'è un grande successo nelle prestazioni quando si utilizza il GUID come chiave primaria?Quale tipo di dati è GUID nel server SQL?

Oltre al problema con il clustering menzionati qui: What are the best practices for using a GUID as a primary key, specifically regarding performance?

penso che dovrebbe essere il numero a 128 bit (come descritto here), ma non riesco a trovare i dettagli della modalità su come è implementato in SQL Server.

+0

http://stackoverflow.com/questions/6945878/how-is-a-guid-actually-stored-and-sorted-compared-in-sql-server – bummi

+0

Grazie, mi è mancato che in qualche modo .... –

risposta

7

16 byte, esattamente come il GUID structure:

typedef struct _GUID { 
    DWORD Data1; 
    WORD Data2; 
    WORD Data3; 
    BYTE Data4[8]; 
} GUID; 
10

Prestazioni saggio, normale GUID è più lento di INT in SQL Server

Se si prevede di utilizzare GUID, utilizzare uniqueidentifer invece di varchar come tipo di dati . Microsoft non ha menzionato come lo implementano, c'è un po 'di ottimizzazione della velocità quando si utilizza uniqueIdentifer come tipo di dati.

Per utilizzare GUID tonalità primario senza sacrificare la velocità di numero intero, rendere il GUID valore sequenziale. Definire il tipo di dati uniqueidentifer come PK, impostare il valore predefinito su NEWSEQUENTIALID().

Vedere NEWSEQUENTIALID (Transact-SQL) per ulteriori dettagli.

Per quanto riguarda il modo in cui i valori sequenziali GUID aiutano le prestazioni, vedere The Cost of GUIDs as Primary Keys.

+0

+1 Grazie per link interessanti. –

Problemi correlati