11

SQL(尤其是 MS SQL server 2008)如何在内部存储和比较 GUID?是数字还是字符串?另外,使用 GUID 作为主键时性能是否会受到很大影响?

除了这里提到的集群问题: 使用 GUID 作为主键的最佳实践是什么,特别是在性能方面?

我认为它应该是 128 位数字(如此所述),但我找不到有关如何在 SQL Server 中实现的模式详细信息。

4

3 回答 3

15

性能方面,正常GUIDINTSQL Server慢

如果您打算使用GUID,请使用uniqueidentifier而不是varchar作为数据类型。微软没有提到他们是如何实现的,当你uniqueidentifier用作数据类型时有一些速度优化。

GUID在不牺牲整数速度的情况下用作主键,请将GUID值设置为序列。定义uniqueidentifier数据类型为 PK,默认设置为NEWSEQUENTIALID().

有关详细信息,请参阅NEWSEQUENTIALID (Transact-SQL)

至于顺序值如何GUID帮助性能,请参阅GUID 作为主键的成本

于 2013-05-13T11:56:14.313 回答
8

16 个字节,与GUID 结构完全相同:

typedef struct _GUID {
  DWORD Data1;
  WORD  Data2;
  WORD  Data3;
  BYTE  Data4[8];
} GUID;
于 2013-05-13T11:39:57.940 回答
1

您也可以使用 nvarchar(128)。

次佳选择是 binary(16) 列:

标准 GUID 的长度正好是 16 个字节。如果您必须将其存储为字符串,则长度实际上取决于您选择如何对其进行编码。作为没有连字符的十六进制(AKA base-16 编码),它将是 32 个字符(每个字节两个十六进制数字)。

于 2018-09-26T13:08:43.057 回答