【发布时间】:2010-11-13 08:38:53
【问题描述】:
到目前为止,我一直在使用 C#“Guid = Guid.NewGuid();”使用 Linq to SQL 生成一个唯一 ID 的方法,该 ID 可以存储为我的一些 SQL Server 数据库表中的 ID 字段。 我被告知,出于索引的原因,使用 GUID 是一个坏主意,我应该使用自动递增的 Long 来代替。使用 long 会加速我的数据库事务吗?如果是这样,我该如何生成 Long 类型的唯一 ID?
问候,
【问题讨论】:
-
“我被告知,出于索引的原因,使用 GUID 是个坏主意” - 如果您的身份字段上有聚集索引,则 GUID 会损害插入的性能。 SQL Server 根据聚集索引按顺序存储表。由于新的 GUID 是非顺序的,插入新行将不得不插入到表的中间而不是末尾,从而导致大量 IO。只要是聚集索引的列类型就会避免这个问题。
-
只是添加 - 如果 GUID 是主键,那么默认情况下 GUID 将是集群的 - 这可以是非集群的,但需要手动干预
-
请参阅 sqlblogcasts.com/blogs/martinbell/archive/2009/05/25/… - 和 dotnetrocks.com/default.aspx?showNum=455 了解有关该主题的大量内容的播客。
标签: c# sql sql-server guid long-integer