SQL:存储GUIDs

5

我现在有一个需求,需要在一个表中添加一列来存储唯一的ID(guid)。这个ID用于匹配不同表和数据库中的记录,但是不会有外键约束。将guid存储为varchar(32)还是uniqueidentifier类型更好呢?

使用这个列进行连接操作,但不会经常使用。这个ID并不是主键。我的问题是关于存储和性能方面的。


1
正如Jack所回答的那样,将其存储为“uniqueidentifier”。但是请确保表的聚集索引不是基于此字段,因为这会导致插入时的性能问题。 - adrianbanks
这将是一个任意列,不需要聚集索引。 - Dustin Davis
1个回答

22
如果它是GUID,请将其存储为 uniqueidentifier

+1 SQL Server非常支持唯一标识符。我无法想象将GUID保存在非uniqueidentifier字段中的任何原因。 - HCL
5
同意。如果你知道它是什么,就不需要将它存储为其他东西。 - Jack Marchetti
1
+1 做其他事情感觉就像把整数存储为字符串一样合乎逻辑。 - Oskar Kjellin
7
一个UNIQUEIDENTIFIER需要16个字节的存储空间;而一个VARCHAR(32)需要32字节的数据空间(实际上并非真正的可变长度),还需要在某处存储其实际长度。此外,由于它是一个可变长度字段(尽管没有必要这样做),这会增加SQL Server存储的开销。因此,使用UNIQUEIDENTIFIER不仅是“自然”的选择(将GUID作为GUID存储),而且从磁盘空间的角度来看更为“经济”。 - marc_s

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接