SQL Server中的GUID是什么数据类型?

时间:2013-05-13 11:35:04

标签: sql sql-server primary-key guid

如何通过SQL(特别是MS SQL Server 2008)在内部存储和比较GUID?是数字还是字符串?此外,使用GUID作为主键时是否会有很大的性能影响?

除了这里提到的聚类问题: What are the best practices for using a GUID as a primary key, specifically regarding performance?

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

3 个答案:

答案 0 :(得分:13)

性能方面,正常GUID比SQL Server中的INT

如果您打算使用GUID,请使用uniqueidentifier代替varchar作为数据类型。 Microsoft没有提及它们是如何实现的,当您使用uniqueidentifier作为数据类型时,会有一些速度优化。

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

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

关于顺序GUID值如何帮助提高效果,请参阅The Cost of GUIDs as Primary Keys

答案 1 :(得分:8)

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

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

答案 2 :(得分:1)

您还可以使用nvarchar(128)。

下一个最佳选项是一个二进制(16)列:

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