已分区表和索引的计划指南

在对表或索引进行分区前,必须计划创建下列数据库对象:

  • 分区函数

  • 分区方案

分区函数定义如何根据某些列(称为分区依据列)的值将表或索引的行映射到一组分区。

分区方案将把分区函数指定的每个分区映射到文件组。

计划分区函数

计划分区函数时需考虑两个因素:其值确定如何对表进行分区的列(称为分区依据列)和每个分区的分区依据列的值范围。此值范围将确定组成表的分区数。一张表最多可以有 1000 个分区。

可以对分区依据列和值范围所做的选择主要是由区确定的,可以按逻辑方式(如按日期)将数据分组到区上,此逻辑分组是否足够用来管理数据的子集也是主要决定因素。

例如,在 AdventureWorks2008R2 示例数据库的分区方案下,TransactionHistoryTransactionHistoryArchive 表是按 TransactionDate 字段分区的。每个分区的值范围为一个月。TransactionHistory 表维护年度中最新的事务,而 TransactionHistoryArchive 维护以前的事务。通过用这种方法对表进行分区,可以按月将单个月的旧数据快速且有效地从 TransactionHistory 传输到 TransactionHistoryArchive

有关此特定方案的详细信息,请参阅设计分区以管理数据子集

除 timestamp 数据类型、Microsoft .NET Framework 公共语言运行时 (CLR) 用户定义数据类型以及别名数据类型之外,数据类型可用作索引键的任何列,也可以被指定为分区依据列。有关详细信息,请参阅创建已分区表和已分区索引

计划分区方案

在计划分区方案时,必须决定要在哪个文件组上放置分区。在各个文件组上放置分区的主要原因是为了确保可以在分区上独立执行备份操作。这是因为您可以在各个文件组上执行备份。有关详细信息,请参阅在 SQL Server 中备份和还原数据库

重要说明重要提示

如果属于已分区表任何文件组的任意文件未处于 ONLINE 状态,则 SQL Server 不能保证完成任何访问该表的查询,无论查询访问的是哪些分区。

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