20

请清除我对此的疑问,在 SQL Server(2000 及更高版本)中,主键是自动聚集索引还是我们可以选择在主键上使用非聚集索引?

4

2 回答 2

28

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

于 2009-02-24T12:01:50.693 回答
12

人们还可能会补充说,允许对主键进行群集通常是不好的。特别是,当主键由 IDENTITY 分配时,它没有内在意义,因此任何保持表相应排列的努力都是浪费的。

考虑具有 ProductID INT IDENTITY PRIMARY KEY 的表 Product。如果这是集群的,那么以某种方式相关的产品很可能遍布整个磁盘。最好根据我们可能查询的内容(例如 ManufacturerID 或 CategoryID)进行聚类。在任何一种情况下,聚集索引都会(其他条件相同)使相应的查询更加高效。

另一方面,指向它的子表中的外键可能是集群的一个很好的候选者(我反对的是实际上具有 IDENTITY 属性的列,而不是它的亲戚)。因此,在我上面的示例中,ManufacturerID 很可能是 Manufacturer 表的外键,在该表中它被设置为 IDENTITY。列不应该被聚类,但 Product 中引用它的列可能会这样做有很好的优势。

于 2009-02-24T18:16:13.663 回答