分区方案随聚簇索引而变化

时间:2013-09-03 17:14:47

标签: sql sql-server sql-server-2008 tsql

我的表有6亿条记录,并且还有PS_TRPdate(TRPDate)列上的分区,我想将其更改为另一个分区PS_LPDate(LPDate)。

所以我尝试使用以下步骤处理少量数据。 1)删除主键约束。 2)使用新的分区PS_LPDate(LPDate)添加新的主键聚簇索引。

6亿条记录是否可行?任何人都可以指导我吗? 以及它如何与非分区表一起使用?

- 343

1 个答案:

答案 0 :(得分:1)

我的直觉是你应该使用新的主键,文件组和文件创建一个并行表。

为了测试我的假设,我查看了一个old blog post,其中我将前五百万个素数存储到三个文件/文件组中。

我使用了Kalen Delaney编写的TSQL视图,并修改了我的标准来查看分区信息。

如您所见,我们有三个基于主键的分区。

enter image description here

接下来,我将主键放在my_value列上,创建一个名为chg_value的新列,将其更新为素数,然后尝试创建一个新的主键。

-- drop primary key (pk)
alter table tbl_primes drop constraint [PK_TBL_PRIMES]

-- add new field for new pk
alter table tbl_primes add chg_value bigint not null default (0)

-- update new field
update tbl_primes set chg_value = my_value

-- try to add a new primary key
alter table tbl_primes add constraint [PK_TBL_PRIMES] primary key (chg_value)

首先,我很惊讶在丢弃PK后分区仍然保持在一起。但是,该视图显示索引不再存在。

enter image description here

其次,我在约束创建期间最终收到以下错误。

enter image description here

虽然您可以将分区合并/切换到一个不属于该方案的文件组,但是删除/创建主键,分区功能&分区方案,然后使用适当的merge / switch语句再次移动数据,我不会。

这会产生大量工作(TSQL)并导致磁盘上出现大量I / O.

我建议您使用新的主键构建并行分区表(如果有空间)。将旧表中的数据重新加载到新表。

如果您没有使用数据压缩并拥有企业版的SQL Server,为什么不通过打开它来保存字节。

祝你好运!

约翰

<强> www.craftydba.com