2009-02-24 38 views

回答

25

不可以,它可以是非聚集的。但是,如果您没有明确将其定义为非聚簇,并且表上没有聚簇索引,则会将其创建为聚簇。

10

有人可能还会补充说,通常情况下它是不好的,以允许主键进行聚类。特别是,当主键由一个IDENTITY赋值时,它没有内在含义,因此任何保留表格相应的努力都将被浪费。

考虑一个产品,产品ID为INT IDENTITY PRIMARY KEY。如果这是集群化的,那么以某种方式相关的产品可能会遍布整个磁盘。根据我们可能查询的内容进行聚类可能会更好,如ManufacturerID或CategoryID。在这两种情况下,聚集索引(其他条件都相同)会使相应的查询效率更高。另一方面,指向这个子表的外键可能是聚类的一个很好的候选者(我的反对意见是实际上具有IDENTITY属性的列,而不是它的亲属)。因此,在上面的示例中,ManufacturerID可能是制造商表的外键,它被设置为IDENTITY。 列不应该被聚集,但产品中引用它的列可能会这样做以获得好处。

+1

身份在大多数情况下的存在意味着将有权访问记录的身份,因此身份领域的集群主键似乎是一个好主意。 – 2013-10-04 00:16:04