请清除我对此的疑问,在SQL Server(2000及以上版本)中主键自动聚类索引还是我们可以选择在主键上使用非聚集索引?
不,它可以是非聚集的.但是,如果您没有将其显式定义为非聚集且表上没有聚簇索引,则它将被创建为聚簇.
有人可能还会补充说,经常让主键成为群集是很糟糕的.特别是,当主键由IDENTITY分配时,它没有内在含义,因此任何保持表格相应排列的努力都将被浪费.
考虑一个表Product,其中包含ProductID INT IDENTITY PRIMARY KEY.如果这是集群的,则以某种方式相关的产品可能会遍布整个磁盘.最好通过我们可能基于的东西进行聚类,比如ManufacturerID或CategoryID.在任何一种情况下,聚集索引(其他条件相同)会使相应的查询更有效.
另一方面,子表中指向此的外键可能是群集的良好候选者(我的反对意见是实际具有IDENTITY属性的列,而不是其亲属).因此,在上面的示例中,可能是ManufacturerID是Manufacturer表的外键,其中它被设置为IDENTITY.该列不应该是群集的,但Product中引用它的列可能会很好地实现.