0

我们有一个超过 1.11 亿行的事务表,它的聚集复合主键为...

RevenueCentreID  int
DateOfSale       smalldatetime
SaleItemID       int
SaleTypeID       int

...在 SQL 2008 R2 数据库中。

我们将很快为归档项目截断并重新填充表,因此一旦表被截断,就有机会获得正确的索引。保留复合主键会更好,还是应该使用唯一的自动增量主键?

表上的大多数搜索都是使用 DateOfSale 和 RevenueCentreID 列完成的。我们也经常加入 SaleItemID 列。我们很少使用 SaleType 列,实际上它只是包含在主键中以实现唯一性。我们不关心插入和删除新的销售数据需要多长时间(一夜之间完成),而是返回报告的速度。

4

3 回答 3

1

已经了解到,您需要并且需要自然键和代理键。

自然键保持业务键的唯一性,非常适合索引。代理键将有助于查询和开发。

因此,在您的情况下,代理自动递增键很好,因为它有助于保持所有数据行的完整。DateOfSale、RevenueID 和 ClientID 的自然键将成为确保不存储重复记录并加快查询速度的好方法,因为您可以索引自然键。

于 2011-06-27T11:31:11.473 回答
1

代理键在这里没有用。我建议在列出的列上使用聚集主键,并在SaleItemID.

于 2011-06-27T11:32:04.787 回答
0

如果您不关心插入和删除的速度,那么您可能需要多个精确定位查询的索引。

您可以按照您的建议创建一个自动递增的主键,但也可以根据需要创建索引来覆盖报告查询。在键中当前拥有的列上创建唯一约束以强制唯一性。

索引调优向导将帮助定义最佳索引集,但最好自己创建。

经验法则 - 您可以定义要索引的列,也可以“包含”列。

如果您的报告在列上有 OrderBy 或 Where 子句,那么您需要针对这些定义索引。选择中返回的任何其他字段都应包含在列中。

于 2011-06-27T11:26:40.260 回答