Sql server 将聚集索引添加到具有非聚集唯一主键索引的表中
我有一个具有以下结构的现有表:Sql server 将聚集索引添加到具有非聚集唯一主键索引的表中,sql-server,indexing,sql-server-2012,Sql Server,Indexing,Sql Server 2012,我有一个具有以下结构的现有表: TableA ( Id1 int not null, Id2 int not null ) 其中主键是复合(Id1,Id2)。如果您还没有推导出它,这是一个多对多关联表。这些是表中唯一的列 由于本实例中业务用例的性质,填充表的实际应用程序数据只是一对多关系。行的数量非常少。大约50排。偶尔会创建新的Id2记录,然后将其与现有的Id1记录关联。甚至很少会创建新的Id1记录,需要插入一组新的Id1、Id2记录。然而,在日常基础上,数据是静态的。该表在
TableA
(
Id1 int not null,
Id2 int not null
)
其中主键是复合(Id1,Id2)
。如果您还没有推导出它,这是一个多对多关联表。这些是表中唯一的列
由于本实例中业务用例的性质,填充表的实际应用程序数据只是一对多关系。行的数量非常少。大约50排。偶尔会创建新的Id2
记录,然后将其与现有的Id1
记录关联。甚至很少会创建新的Id1
记录,需要插入一组新的Id1、Id2
记录。然而,在日常基础上,数据是静态的。该表在联接查询中大量使用
表上唯一的索引是(Id1、Id2)
上的非聚集、唯一、主键
(作为约束定义的一部分创建)
为了满足将数据同步到另一个数据库的某些要求,我需要在此表中添加聚集索引
在保持最佳性能和良好的物理数据组织的同时,最好的方法是什么
鉴于行数较少,我倾向于用聚集索引替换非聚集索引
一些想法:
- 由于表中没有其他列,因此无法在任何其他列上添加聚集索引
- 只在一列上添加聚集索引没有意义,可能有害
- 在同一列上同时使用聚集索引和非聚集索引会有什么影响
- 因为实际数据是一对多的,并且没有使用多对多结构,所以用聚集索引替换非聚集索引并不坏
- 数据插入PK列上的聚集索引会导致物理数据组织错误
- 向表中添加标识列并将聚集索引放在其上可以解决这个问题,但对查询没有任何好处
- 我可能分析过度了
上的聚集索引(主键)(id1,id2)
- 加上
上的非聚集唯一索引(id2,id1)
每隔一段时间(每天或每周一次,或者在对这个不经常更改的表进行更改之后),您可以重建所有索引以对其进行碎片整理,并使统计信息保持最新。这种维护应该以任何方式对所有表进行。我将主键索引替换为集群索引。我喜欢包含PK字段反向选择的非聚集索引。他补充道。一天后回顾这个问题:完全过度分析了它。