我有几个表,其唯一的数据是uniqueidentifier(Guid)列。由于guid是非顺序的(并且它们是由客户端生成的,所以我不能使用newsequentialid()),因此我在此ID字段上创建了一个非主要的,非聚集的索引,而不是为表提供了聚集的主要键。
我想知道这种方法对性能的影响。我见过有人建议表应该具有自动递增(“身份”)int作为集群主键,即使它没有任何意义,因为这意味着数据库引擎本身可以使用该值快速查找一行,而不必使用书签。
我的数据库是跨一堆服务器进行合并复制的,所以我避开了Identity int列,因为它们有点麻烦,无法正确进行复制。
你怎么看?表应该有主键吗?或者,如果没有明智的索引来建立索引,可以没有任何聚集索引吗?
您需要了解,尽管默认情况下将聚集索引放在表的主键上,但是这两个概念是分开的,应该分开考虑。CIX指示NCIX存储和引用数据的方式,而PK为每一行提供唯一性以满足表的逻辑要求。
没有CIX的表只是一个堆。没有PK的表通常被认为是“非表”。最好分别了解PK和CIX概念,以便您可以在数据库设计中做出明智的决策。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。