设计分区以管理数据子集

通过对表或索引进行分区,可以使用 Transact-SQL ALTER TABLE...SWITCH 语句按以下方式快速有效地移动数据子集。

  • 将某个表作为分区添加到现存的已分区表中。

  • 将分区从一个已分区表切换到另一个已分区表。

  • 删除分区以形成单个表。

如果需要定期向已分区表添加新数据以及从同一已分区表中删除旧数据,可以使用这些方案。此操作会涉及各种方案中的大量或少量数据。如果必须加载、清除或转换要添加的新数据,则在将新数据作为分区添加之前可以将其视为独立的实体。可以将旧数据存档或存入数据仓库。无论集合有多大,都能快速有效地进行传输,因为并不以物理方式移动数据,这与 INSERT INTO SELECT FROM 语句不同。只有关于存储位置的元数据会从一个分区变为另一个分区。

示例应用场景

在 AdventureWorks2008R2 示例数据库的分区方案下,Adventure Works Cycles 通过在 TransactionHistory 表与 TransactionHistoryArchive 表之间切换分区将位于前一个表中的旧数据存档到后一个表中。可通过根据 TransactionDate 字段对 TransactionHistory 进行分区来执行此操作。每个分区的值范围为一个月。TransactionHistory 表维护年度中最新的事务,而 TransactionHistoryArchive 维护以前的事务。通过按这种方式对表进行分区,可以将一年期数据的单月值每月从 TransactionHistory 传输到 TransactionHistoryArchive

在每个月开始,TransactionHistory 表中当前具有的最早一个月的数据将被切换到 TransactionHistoryArchive 表中。若要完成此任务,应符合以下要求:

  1. TransactionHistoryArchive 表必须与 TransactionHistory 表具有相同的设计架构。还必须具有空白分区用来接收新数据。在这种情况下,TransactionHistoryArchive 是一个仅由两个分区组成的已分区表。一个分区包含 2003 年 9 月之前的所有数据,另一个分区包含 2003 年 9 月及之后的所有数据。后一个分区是空的。

    分区切换之前的表结构

  2. 修改 TransactionHistoryArchive 表的分区函数,以便将该表的空白分区拆分为两个分区,并将其中一个分区定义为接收 2003 年 9 月数据的新分区。

    分区切换的第一个步骤

  3. TransactionHistory 表的第一个分区(其中包含 2003 年 9 月期间创建的所有数据)切换为 TransactionHistoryArchive 表的第二个分区。请注意,必须对 TransactionHistory 表定义检查约束以指定没有早于 9 月 1 日 (TransactionDate >= '9/01/2003') 的数据。此约束可确保分区 1 仅包含 2003 年 9 月的数据,并确保该分区已准备好切换为 TransactionHistoryArchive 表的仅包含 2003 年 9 月的数据的分区。还请注意,在切换之前必须删除或禁用任何与它们各自的表未对齐的索引。但在切换之后可以重新创建这些索引。有关对齐已分区索引的详细信息,请参阅已分区索引的特殊指导原则

    分区切换的第二个步骤

  4. 修改 TransactionHistory 表的分区函数,以便将其前两个分区合并为一个分区。假设现有检查约束被更改为指定没有早于 10 月 1 日 (TransactionDate >= '10/01/2003') 的数据,则此分区(现在为分区 1)包含 2003 年 10 月创建的所有数据并将在下个月准备好切换为 TransactionHistoryArchive

    分区切换的第三个步骤

  5. 再次修改 TransactionHistoryArchive 表的分区函数,以便将其第二个分区(包含刚刚添加的 9 月份数据)与第一个分区合并。此操作将使 TransactionHistoryArchive 表回到其初始状态,即第一个分区包含所有数据而第二个分区为空。

    分区切换的第四个步骤

  6. 再次修改 TransactionHistory 表的分区函数,以便将其最后一个分区拆分为两个分区,以使最新月份的数据与以前月份的数据分开并使分区准备好接收新数据。

    分区切换的第五个步骤

有关实现此方案的 Transact-SQL 脚本,请参阅 ReadMe_SlidingWindow 示例。有关示例的信息,请参阅安装 SQL Server 示例和示例数据库的注意事项