从分区表中删除主键约束是否会破坏分区?

Ica*_*rus 6 sql-server-2008 sql-server

我们有一个按日期列分区的表。表的主键是此日期列和其他 4 个列的组合键。

我们正在考虑从该表中删除主键约束并简单地创建一个新的非聚集索引。

由于分区列是主键的一部分,如果我们删除主键约束,分区是否会受到影响?

bri*_*ian 7

它不应该影响表的分区,因为表是在指定了分区列的分区方案上创建的。

每个分区都有自己的 HOBT(堆或 B 树)。所以基本上你的表中的每个日期都有一个 HOBT。

如果主键也是聚集索引,您将把每个分区的 B 树转换为堆。根据表的大小,将数据从 B 树移动到堆可能需要大量的时间和资源。建议在尝试删除聚集索引之前删除所有非聚集索引,然后在(或禁用/重建)之后重新创建它们。下面是微软的详细解释:

“当删除聚集索引时,存储在聚集索引叶级的数据行存储在无序表(堆)中。删除聚集索引可能需要时间,因为除了删除聚集索引之外,所有非聚集索引必须重建表上的索引,用指向堆的行指针替换聚集索引键。删除表上的所有索引时,首先删除非聚集索引,最后删除聚集索引。”

http://msdn.microsoft.com/en-us/library/ms190691%28v=SQL.90%29.aspx

我不会评论这样做的查询性能影响,因为我不熟悉如何查询表。

与任何重大更改一样,请确保在尝试进行此更改之前在测试环境中尝试此操作。