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

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

有帮助吗?

解决方案

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

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

其他提示

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top