Какой тип данных 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 символа (две шестнадцатеричные цифры на байт).