uniqueidentifier在数据库中是唯一的吗?

时间:2015-02-09 07:42:36

标签: sql sql-server

我有一些数据库,每个数据库都有一个审计表。其中一个数据库是一个“通用”数据库,其中包含国家,州等表格。

此公共数据库的表在其他数据库中作为视图引用。

目前我的审计表有一个标识列。为了列出审计记录,我使用UNION将普通数据库中的普通数据库和审计表中的审计表联合起来。

但是审计表中的标识列可能是相同的。

如果我在审计表中添加uniqueidentifier列并将其用作我的唯一ID,那么此列在数据库中是否唯一?

2 个答案:

答案 0 :(得分:3)

如果您使用uniqueidentifier生成的内置方法(如newId()或C#的Guid.NewGuid()),是的,它在数据库,服务器,国家/地区等方面都是唯一的。< / p>

事实上,这是GUID的一个重要用途 - 复制。如果您在两个数据库中具有相同的GUID,则可以保证它是故意放在那里的。

但是,请注意GUID确实存在缺点 - 它们可能会使您的指数表现更差(或者至少需要更多维护),而且它们通常会更大。

此外,GUID不是完全随机 - 有一些不同的GUID生成算法,其中一些本质上是唯一的(例如使用MAC地址作为GUID的一部分 - 默认情况下MAC是唯一的,虽然你可以手动覆盖它们 - 所以每个物理服务器的一个部分是唯一的,并且机器确保它不对两个GUID使用相同的时间戳。还有顺序GUID(newSequentialId()),它们可以方便地避免索引碎片(当然对聚簇索引非常有用) - 请注意那些依赖于计算机的MAC地址,并且它们是可预测的,所以如果你'让GUID公开,你依赖它们是“秘密”,你可能不想使用它们。有些GUID算法比其他算法更容易预测。

答案 1 :(得分:0)

它是普遍独特的。它是一个随机生成的32个字符串,有可能重复为1 /(16 ^ 32)。

没有一定的机制来创造唯一性,极低的概率就是这样。