2009-06-23 171 views
1

我有一个具有唯一ID的一组表。我一直使用唯一标识符数据类型并从我的C#接口传入一个GUID的时间最长。然而,为了查询速度的目的,我决定改用bigint并传递很长时间。生成C#长唯一ID

什么是每次运行代码以便不重复ID时创建唯一长整型的最简单方法?

回答

4

确保bigint在数据库表中唯一的唯一方法是让SQL Server为您生成它 - 使其成为IDENTITY列。

你真的使用uniqueidentifier衡量表现,发现它太慢?

+0

不,但是确实存储ID值为3h38d9383-3j394juj93-3jd309d等的字段比单纯使用从1增加到1000000等的单个整数要慢得多。 – Goober 2009-06-23 10:54:59

0

除种子外还有其他生成唯一编号的选项。一种可能性是根据时间生成一个数字,比如滴答声,或者更好地计算自2009年以来的秒数。然后根据位置添加一个唯一的数字(或者如果您没有在服务器上执行该数字)号码被创建到号码的末尾(最低有效位)。

因此,如果您新的唯一编号应用服务器1上创建的,它的id为42,自2009年开始它一直4000秒,新的标识将是400042.产生可能是400942的下一个,并且在同一时间从不同服务器生成的一个可能是400943.

1

如果速度是一个问题,如果使用newsequantialID()函数而不是newID()生成唯一标识符,则可以获得查询改进。新方法生成顺序唯一标识符

0

您认为放缓的地方在哪里?查询或插入/更新?我问,因为GUID作为主键不适用于插入/更新,因为它们不像IDENTITY那样是顺序的,并且可能导致某个键的聚集索引发生一些颠簸。但是SQLServer现在有顺序指导,可以解决这个问题。我听到很多关于使用GUID作为键慢的问题,但我想知道这是多么的真实。特别是在64位机器上 - 比较128位数字比比较64甚至32位数字慢得多?