生成C#长唯一ID

时间:2009-06-23 10:49:29

标签: c# uniqueidentifier long-integer

我有一个SQL数据库,其中包含一组具有唯一ID的表。我一直在使用唯一的Identifier数据类型并从我的C#接口传入一个guid。但是为了查询速度的目的,我决定转而使用bigint并传入很长时间。

每次运行代码时,最简单的方法是创建唯一的long,以便不会重复ID?

4 个答案:

答案 0 :(得分:5)

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

您是否实际使用uniqueidentifier测量性能并发现它太慢了?

答案 1 :(得分:1)

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

答案 2 :(得分:0)

除了种子之外,还有其他选项可用于生成唯一数字。一种可能性是根据时间生成一个数字,比如滴答声,或者更好地计算自2009年开始以来的秒数。然后根据位置(或者如果您不在服务器上执行此操作的帐户)附加一个唯一的数字)数字创建到数字的末尾(最低有效数字)。

因此,如果您的新唯一编号是在 app server 1 上创建的,并且它的ID为42且自2009年初以来已经为4000秒,那么您的新标识符将为400042。可以是400942,并且在同一时间从不同服务器生成的可以是400943.

答案 3 :(得分:0)

你在哪里看到减速?查询或插入/更新?我问,因为GUID作为主键不适合插入/更新,因为它们不像IDENTITY那样顺序,并且可能导致键的聚集索引中的某些颠簸。但SQLServer现在有顺序guid来解决这个问题。我听说很多关于使用GUID的键很慢但是我想知道这是多少才是真的。特别是在64位机器上 - 比较128位数字真的比比较64位甚至32位数字慢得多吗?