到目前为止,我一直在使用C#“ Guid = Guid.NewGuid();” 生成唯一ID的方法,可以使用Linq to SQL将其作为ID字段存储在我的某些SQL Server数据库表中。我被告知,出于索引的原因,使用GUID是一个坏主意,而应该使用自动增量Long来代替。长时间使用会加快我的数据库交易速度吗?如果是这样,我该如何生成Long类型的唯一ID?
问候,
两者都有优点和缺点,这完全取决于您如何使用它们。
马上,如果您需要可在多个数据库中使用的标识符,则需要GUID。Long有一些技巧(手动为每个数据库分配不同的种子/增量),但是这些技巧无法很好地扩展。
就索引而言,如果索引是群集的(默认情况下,主键是群集的),Long将提供更好的插入性能,因为不需要在每次插入后重新组织表。
但是,就并发插入而言,长(标识)列将比GUID慢一些- 标识列的生成需要一系列互斥锁,以确保只有一行获得下一个序号。在许多用户始终插入许多行的环境中,这可能会降低性能。在这种情况下,GUID的生成速度更快。
在存储方面,GUID占用的空间是Long的两倍(8个字节对16个字节)。但是,这取决于行的整体大小,如果8个字节要在一个叶子中容纳多少记录,从而在平均请求期间从磁盘中拉出叶子的数量产生显着差异,则取决于该行。