我想对当前具有适当列作为主键的大型表进行分区。
我们希望通过分区切换定期删除旧行。
该表有一个日期列,我打算将其用作分区函数的键。
据我了解,这不可避免地意味着我将不得不使用一个同时使用原始 PK 列和日期列的新主键重新创建表的主键。
令我震惊的是,这破坏了 PK 的实用性。
理论上,新 PK 现在允许原始单个 PK 列中的重复值。
这让我很烦恼。事情就是这样吗?没有其他选择吗? (除了必须在原始 PK 列上添加唯一约束/索引之外?)
必须使用相同(或功能相同)的分区函数对表和索引进行分区,才能使用
SWITCH
或分区级别 TRUNCATE
。由于 SQL Server 需要唯一分区索引(包括主键)才能将分区列作为键,因此这意味着日期分区列必须是 PK 的一部分,才能使用 SWITCH
(或 TRUNCATE
)删除旧数据。
这让我很烦恼。事情就是这样吗?没有其他选择吗?
除了添加日期作为关键列之外,另一种方法是删除 PK,
SWITCH
,并在清除过程中重新创建 PK。这当然不如单独使用 SWITCH
高效,但在清除大量行时比 DELETE
更高效。