2013-05-13 70 views
8

GUID是如何内部存储的,并通过SQL进行比较(尤其是MS SQL Server 2008)?它是一个数字还是字符串?另外,使用GUID作为主键时性能会不会很高?什么数据类型是SQL服务器中的GUID?

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

我觉得应该是128位数字(如描述here),但我不能找到它是如何在SQL服务器中实现模式的详细信息。

+0

http://stackoverflow.com/questions/6945878/how-is-a-guid-actually-stored-and-sorted-compared-in-sql-server – bummi 2013-05-13 11:39:43

+0

谢谢,我错过了,不知何故......。 – 2013-05-13 11:48:25

回答

7

16个字节,恰好为GUID structure

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

明智的性能,正常GUID是SQL Server比INT

如果你打算使用GUID,使用uniqueidentifer代替varchar数据类型。微软没有提到他们是如何实现它的,当你使用uniqueIdentifer作为数据类型时,有一些速度优化。

要使用GUID作为主键而不牺牲整数的速度,请使GUID连续。将uniqueidentifer数据类型定义为PK,将缺省值设置为NEWSEQUENTIALID()

查看NEWSEQUENTIALID (Transact-SQL)了解更多详情。

至于顺序GUID值如何帮助性能,请参阅The Cost of GUIDs as Primary Keys

+0

+1感谢有趣的链接。 – 2013-05-13 12:28:57

相关问题