【发布时间】:2010-10-09 13:14:43
【问题描述】:
请清除我对此的疑问,在 SQL Server(2000 及更高版本)中,主键是自动聚集索引还是我们可以选择在主键上使用非聚集索引?
【问题讨论】:
标签: sql sql-server indexing primary-key
请清除我对此的疑问,在 SQL Server(2000 及更高版本)中,主键是自动聚集索引还是我们可以选择在主键上使用非聚集索引?
【问题讨论】:
标签: sql sql-server indexing primary-key
不,它可以是非集群的。但是,如果您没有将其显式定义为非聚簇并且表上没有聚簇索引,则会将其创建为聚簇。
【讨论】:
人们还可能会补充说,允许对主键进行集群通常是不好的。特别是,当主键由 IDENTITY 分配时,它没有任何内在意义,因此任何保持表相应排列的努力都是徒劳的。
考虑一个表 Product,其 ProductID 为 INT IDENTITY PRIMARY KEY。如果这是集群的,那么以某种方式相关的产品很可能遍布整个磁盘。最好根据我们可能查询的内容(例如 ManufacturerID 或 CategoryID)进行聚类。在上述任何一种情况下,聚集索引都会(在其他条件相同的情况下)使相应的查询更加高效。
另一方面,指向它的子表中的外键可能是聚类的一个很好的候选者(我反对的是实际上具有 IDENTITY 属性的列,而不是它的亲戚)。因此,在我上面的示例中,ManufacturerID 很可能是 Manufacturer 表的外键,在该表中它被设置为 IDENTITY。 那个列不应该被聚类,但是 Product 中引用它的列可能会这样做有很好的优势。
【讨论】: