1

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

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

4

4 回答 4

6

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

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

于 2009-06-23T10:52:33.127 回答
1

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

因此,如果您的新唯一编号是在应用服务器 1上创建的,并且它的 ID 为 42,并且自 2009 年初以来已经过了 4000 秒,那么您的新标识符将为 400042。下一个生成的可能是 400942,而另一个生成的可能是另一个同一时间的服务器可能是 400943。

于 2009-06-23T11:03:05.260 回答
1

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

于 2009-06-23T11:17:10.957 回答
0

你在哪里看到放缓?查询还是插入/更新?我问是因为 GUID 作为主键不适合插入/更新,因为它们不像 IDENTITY 那样是连续的,并且可能会导致键的聚集索引出现一些抖动。但是 SQLServer 现在有顺序指南可以解决这个问题。我听说很多关于使用 GUID 作为键的速度很慢,但我想知道这在多大程度上是真的。特别是在 64 位机器上 - 比较 128 位数字真的比比较 64 甚至 32 位数字慢得多吗?

于 2009-06-23T11:17:20.393 回答