2013-05-13 16 views
8

W jaki sposób GUID jest przechowywany wewnętrznie i porównywany przez SQL (w szczególności MS SQL Server 2008)? Czy to liczba lub ciąg znaków? Ponadto, czy podczas używania identyfikatora GUID jako klucza głównego występuje duża wydajność?Jaki typ danych to GUID w serwerze SQL?

Oprócz problemu z klastrów wspomniano tutaj: What are the best practices for using a GUID as a primary key, specifically regarding performance?

myślę, że powinno być numer 128bit (jak opisano here), ale nie mogę znaleźć szczegóły trybie on jak to jest realizowane w serwerze SQL.

+0

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

+0

Dzięki, tęskniłem za tym jakoś .... –

Odpowiedz

7

16 bajtów, dokładnie jak GUID structure:

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

Wydajność mądry, normalny GUID jest wolniejszy niż INT w SQL Server

Jeśli planujesz używać GUID użyć uniqueidentifer zamiast varchar jako typ danych . Microsoft nie wspomniał o sposobie jego implementacji, istnieje pewna optymalizacja prędkości, gdy jako typ danych używany jest uniqueIdentifer.

Aby użyć jako klucza podstawowego GUID bez poświęcania szybkości całkowitej, sprawiają, że wartość sekwencyjnyGUID. Zdefiniuj typ danych uniqueidentifer jako PK, ustaw domyślną wartość na NEWSEQUENTIALID().

Aby uzyskać więcej informacji, patrz NEWSEQUENTIALID (Transact-SQL).

Informacje o tym, jak wartości sekwencyjne GUID pomagają w osiągnięciu wydajności, patrz The Cost of GUIDs as Primary Keys.

+0

+1 Dzięki za interesujące linki. –