2013-05-13 15 views
8

Wie wird GUID intern von SQL (insbesondere MS SQL Server 2008) gespeichert und verglichen werden? Ist es eine Nummer oder ein String? Gibt es einen großen Leistungseinbruch bei der Verwendung von GUID als Primärschlüssel?Was Datentyp in SQL Server-GUID?

Neben dem Problem mit Clustering hier erwähnt: What are the best practices for using a GUID as a primary key, specifically regarding performance?

ich denke, es 128bit Zahl sein soll (wie here beschrieben), aber ich kann nicht Modus Details finden, wie es in SQL Server implementiert.

+0

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

+0

Danke, ich habe das irgendwie vermisst .... –

Antwort

7

16 Bytes, genau wie die GUID structure:

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

Performance weise, normal GUID ist langsamer als INT in SQL Server

Wenn Sie GUID verwenden möchten, verwenden uniqueidentifer statt varchar als Datentyp . Microsoft hat nicht erwähnt, wie sie es implementieren, es gibt einige Geschwindigkeitsoptimierung, wenn Sie uniqueIdentifer als den Datentyp verwenden.

GUID als Primärschlüssel zu verwenden, ohne Geschwindigkeit zu opfern integer, macht den Wert GUIDsequenzielle. Definieren uniqueidentifer Datentyp als PK, eingestellt auf den Standard NEWSEQUENTIALID().

Siehe NEWSEQUENTIALID (Transact-SQL) für weitere Details.

Wie die fortlaufenden Werte GUID die Leistung unterstützen, siehe The Cost of GUIDs as Primary Keys.

+0

+1 Danke für interessante Links. –