【发布时间】:2008-08-08 02:47:15
【问题描述】:
我有几个表,它们唯一的唯一数据是唯一标识符(Guid)列。因为 guid 是非顺序的(并且它们是客户端生成的,所以我不能使用 newsequentialid()),所以我在这个 ID 字段上创建了一个非主索引、非聚集索引,而不是给表一个聚集主索引键。
我想知道这种方法对性能有何影响。我看到有些人建议表应该有一个自动递增(“身份”)int作为集群主键,即使它没有任何意义,因为这意味着数据库引擎本身可以快速使用该值查找一行,而不必使用书签。
我的数据库是跨多个服务器进行合并复制的,因此我避开了 identity int 列,因为它们在复制中有点麻烦。
你的想法是什么?表应该有主键吗?或者,如果没有合理的列可以这样索引,那么没有任何聚集索引是否可以?
【问题讨论】:
-
由于您正在进行复制,因此您的正确身份是需要清除的。我会让你的 GUID 成为主键,但不是聚集的,因为你不能使用 newsequentialid。这让我觉得你最好的课程。如果你不把它做成一个PK,而是在它上面加上一个唯一的索引,迟早会导致维护系统的人不理解FK关系正确引入错误。
标签: sql-server indexing