Какой тип данных GUID в SQL server?

Как GUID внутренне хранится и сравнивается SQL (особенно MS SQL server 2008)? Это число или строка? Также есть большой удар по производительности при использовании GUID в качестве первичного ключа?

кроме проблемы с кластеризацией, упомянутой здесь: каковы наилучшие методы использования GUID в качестве первичного ключа, особенно в отношении производительности?

Я думаю, что это должно быть 128bit число (как описано здесь), но я не могу найти сведения о режиме о том, как это реализовано в SQL server.

3 ответов


16 байт, точно как структура GUID:

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

производительность мудрый, нормальный GUID медленнее, чем INT в SQL Server

если вы планируете использовать GUID используйте uniqueidentifer вместо varchar тип данных. Microsoft не упоминала, как они это реализуют, есть некоторая оптимизация скорости при использовании uniqueIdentifer тип данных.

использовать GUID в качестве первичного ключа, не жертвуя скоростью целое, сделать GUID стоимостью последовательный. Определить uniqueidentifer тип данных как PK, установите значение по умолчанию NEWSEQUENTIALID().

посмотреть NEWSEQUENTIALID (Transact-SQL) для получения дополнительной информации.

как последовательный GUID значения производительности см. В статье стоимость GUID в качестве первичных ключей.


вы также можете использовать nvarchar (128).

следующим лучшим вариантом будет двоичный столбец (16):

стандартные GUID ровно 16 байт в длине. Если вы должны хранить его как строку, длина действительно сводится к тому, как вы решите его кодировать. Как шестнадцатеричное (он же кодировка base-16) без дефисов, это будет 32 символа (две шестнадцатеричные цифры на байт).