到目前为止,我一直在使用 C#“Guid = Guid.NewGuid();”方法生成一个唯一的 ID,该 ID 可以使用 Linq to SQL 作为 ID 字段存储在我的一些 SQL Server 数据库表中。
我被告知,出于索引原因,使用 GUID 是一个坏主意,我应该使用自动递增的 Long 来代替。使用 long 会加速我的数据库事务吗?如果是这样,我该如何生成 Long 类型的唯一 ID?
Regards,
两者都有优点和缺点,这完全取决于你如何使用它们。
如果您需要可以跨多个数据库工作的标识符,那么您就需要 GUID。 Long 有一些技巧(手动为每个数据库分配不同的种子/增量),但这些技巧不能很好地扩展。
就索引而言,如果索引是聚集的(默认情况下主键是聚集的,但这可以针对您的表进行修改),Long 将提供更好的插入性能,因为表不需要在每次插入后重新组织。
然而,就并发插入而言,Long(身份)列将比 GUID 慢 - 身份列生成需要一系列独占锁来确保只有一行获得下一个序列号。在许多用户始终插入许多行的环境中,这可能会影响性能。在这种情况下 GUID 生成速度更快。
在存储方面,GUID 占用的空间是 Long 的两倍(8 字节 vs 16 字节)。然而,如果 8 字节会对一个叶子中容纳的记录数量产生显着影响,从而在平均请求期间从磁盘中提取的叶子数量产生显着差异,则取决于行的总体大小。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)