3
使用带覆盖列的唯一非聚集索引而不是主键的含义
我们有一个大表[MyTable]目前既有Primary Key,和一个Unique Non Clustered Index在同一列([KeyColumn])。U NC索引还具有其他覆盖列。 在同一列上同时拥有PK和唯一NC索引似乎是多余的,因此我考虑删除主键,而是出于引用完整性的目的而使用唯一非聚集索引。 请注意,该表完全由另一列群集。 即所以我们有: ALTER TABLE [MyTable] ADD CONSTRAINT [PK_MyTable] PRIMARY KEY NONCLUSTERED ([KeyColumn]) GO 和 CREATE UNIQUE NONCLUSTERED INDEX [IX_MyTable_SomeIndex] ON [MyTable] ([KeyColumn]) INCLUDE ([Column1], [Column2]) GO 据我所知,不可能将覆盖列添加到主键,所以我打算这样做: 放弃依赖于的外键约束 MyTable.KeyColumn 将主键MyTable.KeyColumn完全放在 将外键重新添加到表中(即RI将通过强制执行MyTable.KeyColumn) 我能想到的唯一含义是,我们不会在ERD图上看到可视键符号,并且由于包含了列,因此(叶)索引密度会降低。 我已阅读/programming/487314/primary-key-or-unique-index,并对这样做的完整性和性能方面感到满意。 我的问题是:这种方法有缺陷吗? 编辑 我要完成的任务:性能优化和春季大扫除。通过删除PK或索引,我的索引所需的页面将更少=更快的写入速度,再加上维护/操作的好处,即减少索引以保持碎片整理等。 为了提供一些背景知识,我从来没有过没有PK的表被引用过。但是,在表中添加了带有覆盖列的NC索引这一事实意味着我需要调整自己的想法。