为什么在少数列上启用聚集索引属性而不在其他列上启用?

RPK*_*RPK 1 sql-server-2005 database-design sql-server index-tuning

听说只能有一个聚集索引?我可能错了,但我确定我在某个地方读过。

在我的 SQL Server 2005 表之一中,我有以下列:

SerialNum ------- BigInt -------- 主键

-------- nvarchar(50)

SchemeType ------ nvarchar(50)

当我使用 SQL Server Management Studio 在设计模式下打开表时,我注意到为District启用了聚集索引属性,而为SchemeType禁用了

如果只能有一个聚集索引,那么为什么在SerialNum已定义为主键的情况下,District 还要启用此属性?

如果可以有更多的聚集索引,那么如何为SchemeType列启用此属性?

Aar*_*and 6

主键和聚集索引是两种不同的东西,尽管它们经常结合使用。您的表以这种方式结束的几个潜在原因:

(a) 它可以使用非聚集主键创建PRIMARY KEY NONCLUSTERED,然后添加聚集索引。

(b) 可能已经添加了聚集索引,然后添加了主键(在这种情况下,它不能被聚集,因为已经有一个聚集索引)。

其中任何一个都可能是有意的设计决策、事故、事后的变化等。

在 Management Studio 的设计视图中忽略该属性。聚集索引表,但它由指定的列定义。其他列在技术上仍然是聚集索引的一部分,它们只是不是索引中的关键列。称“启用/禁用”是一种误导。

  • 您的汽车应该有 18" 车轮还是 20" 车轮?你应该把你的餐厅漆成棕褐色还是米色?与许多设计决策一样,这取决于。没有神奇的“主键应该总是/从不聚集”的答案。我不是想回避这个问题——在很多情况下,主键是聚集的,但有原因。您似乎在追求根本不存在的广泛概括。 (2认同)