【发布时间】:2015-10-13 02:03:44
【问题描述】:
我有一个现有的表结构:
TableA
(
Id1 int not null,
Id2 int not null
)
其中主键是复合(Id1, Id2)。如果你还没有推导出来,这是一个多对多关联表。这些是表中唯一的列。
由于此实例中业务用例的性质,填充表的实际应用程序数据只是一对多关系。行数非常少。某处〜50行。有时会创建新的 Id2 记录,然后将其关联到现有的 Id1 记录。更罕见的是,会创建需要插入一组新的 Id1, Id2 记录的新 Id1 记录。然而,在日常基础上,数据是静态的。该表在连接查询中大量使用。
表上的唯一索引是(Id1, Id2) 上的nonclustered, unique, primary key(作为约束定义的一部分创建)。
为了满足同步数据到另一个数据库的一些需求,我需要给这个表添加一个聚集索引。
在保持最佳性能和良好的物理数据组织的同时,最好的方法是什么?
鉴于行数较少,我倾向于用聚集索引替换非聚集索引。
一些想法:
- 由于表中没有其他列,因此无法在任何其他列上添加聚集索引。
- 只在一列上添加聚集索引没有意义,而且可能是有害的。
- 在同一列上同时使用聚集索引和非聚集索引会不会很痛苦?
- 由于实际数据是一对多的,没有利用多对多的结构,所以用聚集索引代替非聚集索引也不错。
- 将数据插入 PK 列上的聚集索引会导致物理数据组织错误。
- 向表中添加标识列并在其上放置聚集索引可以解决此问题,但对查询没有任何好处。
- 我可能过度分析了这一点。
【问题讨论】:
标签: sql-server indexing sql-server-2012