使用UNIQUEIDENTIFIER与INT的T-SQL性能损失

时间:2012-02-24 00:36:58

标签: sql sql-server tsql

如果我需要在T-SQL数据库表中无意识地识别行,我会将它们设置为:

[id] INT NOT NULL IDENTITY(1,1) PRIMARY KEY

但如果我需要ID在几个数据库(在不同的计算机上)中是唯一的,我会选择:

[uid] UNIQUEIDENTIFIER NOT NULL

然后在该列上设置索引:

CREATE INDEX index_name ON [TableName] ([uid]);

所以我想知道通过将INT更改为UNIQUEIDENTIFIER会对数据库产生多大的性能影响?

1 个答案:

答案 0 :(得分:5)

GUID不是代理值在数据库中唯一的唯一选项。立即想到两个选项:

  1. 创建自己的哈希。使用BIGINT并在每个数据库上设置标识种子,例如,数据库A上的1000000000,数据库B上的2000000000等。这支持许多数据库。
  2. 有一个中央序列生成器,它只是碰撞一个中心标识列,并将新的id重新用于插入。规模和并发性可能在这里更重要,但只是在我怀疑的高端。
  3. 在SQL Server 2012中,您将能够使用SEQUENCE更轻松地实现(2)。