Goo*_*ber 4 c# sql sql-server guid long-integer
到目前为止,我一直在使用C#"Guid = Guid.NewGuid();" 生成唯一ID的方法,该ID可以使用Linq to SQL存储在我的某些SQL Server数据库表中作为ID字段.我被告知,出于索引的原因,使用GUID是一个坏主意,我应该使用自动递增Long.将使用长时间加速我的数据库事务?如果是这样,我该如何生成Long类型的唯一ID?
问候,
两者都有利有弊,这完全取决于你如何使用它们.
如果您需要可以跨多个数据库工作的标识符,您需要GUID.Long有一些技巧(手动为每个数据库分配不同的种子/增量),但这些技巧不能很好地扩展.
就索引而言,如果索引是聚簇的,Long将提供更好的插入性能(默认情况下,主键是聚簇的,但可以为您的表修改),因为在每次插入后都不需要重新组织表.
然而,就并发插入而言,Long(标识)列将比GUID慢 - 标识列生成需要一系列独占锁以确保只有一行获得下一个序列号.在许多用户一直插入许多行的环境中,这可能会影响性能.在这种情况下GUID生成更快.
存储方面,GUID占用了Long的两倍空间(8字节对16).但是,如果8个字节在一个叶子中适合多少条记录,从而在平均请求期间从磁盘中提取的叶子数量会产生显着差异,则它取决于行的整体大小.