修改已分区表和已分区索引

可以通过以下方式来修改已分区表和已分区索引:

  • 修改分区函数以便将参与此函数的任何表或索引重新分区。

  • 修改分区方案以指定用于保存新添加的分区的文件组。

  • 将无分区表转换为已分区表。

  • 将已分区表转换为无分区表。

  • 通过添加、移动或删除分区来传输数据

修改分区函数

通过在已分区表或已分区索引的分区函数中增加或减少指定的分区数(加 1 或减 1),可以更改表或索引的分区方式。

增加分区的方法是将某个现有的分区“拆分”为两个分区并重新定义新分区的边界。减少分区的方法是将两个分区的边界“合并”成一个。减少分区操作将重新填充一个分区而不对另一个分区进行分配。

重要说明重要提示

增加分区时,必须存在一个文件组,并且必须用 NEXT USED 属性标记该文件组以保存新的分区。有关如何在分区方案中指定 NEXT USED 文件组的信息,请参阅本主题后面的修改分区方案。

修改分区函数只能用于将一个分区拆分为两个,或将两个分区合并为一个。若要更改表或索引的分区方式(例如,从 10 个分区变为 5 个分区),可以使用下列选项之一。根据系统的配置,这些选项的资源消耗可能会有变化。

  • 用所需的分区函数创建一个新的已分区表,然后使用 INSERT INTO...SELECT FROM 语句将数据从旧表插入新表中。

  • 根据堆创建已分区聚集索引。

    注意注意

    删除的已分区索引会导致分区堆。

  • 使用带有 DROP EXISTING = ON 子句的 Transact-SQL CREATE INDEX 命令删除并重新生成某个现有的已分区索引。

  • 执行一系列 ALTER PARTITION FUNCTION 语句。

SQL Server 没有为修改分区函数提供复制支持。如果要对发布数据库中的分区函数进行更改,必须在订阅数据库中手动执行此操作。

修改分区函数

修改分区方案

通过指定用于保存添加到已分区表的下一个分区的文件组,可以修改分区方案。可通过将 NEXT USED 属性分配给文件组来执行此操作。您可以将 NEXT USED 属性分配给空文件组或已存有分区的文件组。也就是说,一个文件组可以保存多个分区。

修改分区方案

将无分区表转换为已分区表

可以通过以下两种方式之一将现有的无分区表转变为已分区表。

一种方式是通过使用 CREATE INDEX 语句对表创建已分区聚集索引。此操作类似于对任一表创建聚集索引,因为 SQL Server 实质上将删除表并以聚集索引格式重新创建该表。如果已经对表应用了某个已分区聚集索引,则可以使用带有 DROP EXISTING = ON 子句的 CREATE INDEX 删除该索引并以某种分区方案重新生成该索引。

有关聚集索引的信息,请参阅聚集索引设计指南

另一种方式是使用 Transact-SQL ALTER TABLE SWITCH 语句将表中的数据切换到只有一个分区的按范围分区的表中。此已分区表在转换发生之前必须已经存在,并且该表的单个分区必须为空。有关切换分区的详细信息,请参阅使用分区切换高效传输数据。将表修改为已分区表之后,可以修改其分区函数以增加分区,如前面修改分区函数中所述。

将现有表转换为已分区表

将已分区表转换为无分区表

将已分区表更改为无分区表仅涉及到修改已分区表的分区函数,以使该表仅由一个分区组成。尽管这从技术上说仍然是已分区表,但此状态与要对该表执行的任何后续操作不相干。

如果已经对表应用了已分区聚集索引,则可以通过删除该索引并将其作为无分区索引重新生成来获得相同的结果。可使用带有 DROP EXISTING = ON 子句的 Transact-SQL CREATE INDEX 命令来执行此操作。

将已分区表转换为没有分区的标准表

通过切换分区传输数据

Transact-SQL ALTER TABLE...SWITCH 语句使您可以在已分区表之间快速有效地传输数据块。有关详细信息,请参阅使用分区切换高效传输数据