不是必须聚集索引,也可以是非聚集索引。但如果没有明确定义为非聚集索引并且表上没有聚集索引,则会作为聚集索引创建。
有时,允许主键成为聚集索引是不好的。特别是当主键由IDENTITY分配时,它没有内在含义,因此任何按照表格排列的努力都将白费。
考虑一个Product表,其中ProductID INT IDENTITY PRIMARY KEY。如果将其聚集,则相关产品很可能分散在整个磁盘中。最好根据我们可能基于的某些内容进行聚集索引,如ManufacturerID或CategoryID。在这些情况下,聚集索引(其他条件相等)将使相应的查询更加高效。
另一方面,指向此表的子表中的外键可能是聚集的好候选项(我反对具有IDENTITY属性的实际列,而不是它的相关列)。因此,在我的上面的示例中,很可能ManufacturerID是指向Manufacturer表的外键,该表中设置为IDENTITY。该列不应聚集,但在Product中引用它的列可能会发挥良好优势。