对于表分区(按日期)场景似乎我必须将日期列添加到 PK - 但这不会降低 PK 的价值吗?

问题描述 投票:0回答:1

我想对当前具有适当列作为主键的大型表进行分区。

我们希望通过分区切换定期删除旧行。

该表有一个日期列,我打算将其用作分区函数的键。

据我了解,这不可避免地意味着我将不得不使用一个同时使用原始 PK 列和日期列的新主键重新创建表的主键。

令我震惊的是,这破坏了 PK 的实用性。

理论上,新 PK 现在允许原始单个 PK 列中的重复值。

这让我很烦恼。事情就是这样吗?没有其他选择吗? (除了必须在原始 PK 列上添加唯一约束/索引之外?)

sql sql-server database database-partitioning
1个回答
0
投票

必须使用相同(或功能相同)的分区函数对表和索引进行分区,才能使用

SWITCH
或分区级别
TRUNCATE
。由于 SQL Server 需要唯一分区索引(包括主键)才能将分区列作为键,因此这意味着日期分区列必须是 PK 的一部分,才能使用
SWITCH
(或
TRUNCATE
)删除旧数据。

这让我很烦恼。事情就是这样吗?没有其他选择吗?

除了添加日期作为关键列之外,另一种方法是删除 PK,

SWITCH
,并在清除过程中重新创建 PK。这当然不如单独使用
SWITCH
高效,但在清除大量行时比
DELETE
更高效。

© www.soinside.com 2019 - 2024. All rights reserved.