创建分区的表和索引

适用于:SQL Server (所有受支持的版本) Azure SQL数据库Azure SQL 托管实例

可以使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server、Azure SQL 数据库和Azure SQL 托管实例中创建分区表或索引。 已分区表和索引中的数据水平划分为可分布在数据库中多个文件组或存储在单个文件组中的单位。 分区可以使大型表和索引更易于管理并且更灵活。

创建分区表或索引通常发生在三个或四个部分:

  1. (可选) 创建文件组 或文件组以及保存分区方案指定的分区的相应数据文件。 在多个文件组上放置分区的主要原因是确保可以独立对文件组执行备份和还原操作。 如果不需要,可以选择使用现有文件组(例如)将所有分区分配给单个文件组,或者 PRIMARY使用相关数据文件的新文件组 () 。 在几乎所有情况下,无论是否使用多个文件组,都将实现 分区的所有优势

  2. 创建一个 分区函数 ,该函数根据指定列的值将表或索引的行映射到分区中。 可以使用单个分区函数对多个对象进行分区。

  3. 创建一个 分区方案,用于 将分区表或索引的分区映射到一个文件组或多个文件组。 可以使用单个分区方案对多个对象进行分区。

  4. 创建或更改表或索引,并将分区方案指定为存储位置,以及用作分区列的列。

注意

Azure SQL 数据库中完全支持分区。 由于只有PRIMARYAzure SQL数据库中支持文件组,因此所有分区都必须放在文件组上PRIMARY

表分区在 Azure Synapse Analytics 中的专用 SQL 池中也可用,语法有一些差异。 在 专用 SQL 池中的分区表中了解详细信息。

权限

创建已分区表需要在数据库中具有 CREATE TABLE 权限,对在其中创建表的架构具有 ALTER 权限。 创建已分区索引需要对要创建索引的表或视图具有 ALTER 权限。 创建已分区表或索引需要以下附加权限之一:

  • ALTER ANY DATASPACE 权限。 默认情况下,此权限授予 sysadmin 固定服务器角色和 db_ownerdb_ddladmin 固定数据库角色的成员。

  • 对在其中创建分区函数和分区方案的数据库的 CONTROL 或 ALTER 权限。

  • 对在其中创建分区函数和分区方案的数据库所在服务器的 CONTROL SERVER 或 ALTER ANY DATABASE 权限。

使用 Transact-SQL 在一个文件组上创建分区表

如果不需要单独对文件组执行备份和还原操作,则使用单个文件组对表进行分区可简化对已分区表的管理。

此示例适用于不支持添加文件和文件组的 Azure SQL 数据库。 Azure SQL数据库中通过创建文件组中的PRIMARY分区来支持表分区。 对于SQL Server和Azure SQL 托管实例,可能需要根据文件组和文件管理做法指定用户创建的文件组。

本示例逐步介绍如何使用 Transact-SQL 在 SQL Server Management Studio (SSMS) 中创建分区表,并将所有分区分配给PRIMARY文件组。 示例:

  • 使用 datetime2 数据类型创建一myRangePF1个名为三个边界值的 RANGE RIGHT 分区函数。 三个边界值将导致具有四个分区的分区表。
  • 创建一个名为的 myRangePS1 分区方案,该方案使用 ALL TO 语法将分区函数中的所有 myRangePF1 分区分配给 PRIMARY 文件组。
  • 创建在分区方案中命名 PartitionTablemyRangePS1 表,并指定一个名为 col1 分区列的列。
  1. “对象资源管理器” 中,连接到 数据库引擎的实例。

  2. 在标准栏上,选择“新建查询” 。

  3. 将以下示例复制并粘贴到查询窗口中,然后选择“执行”。 该示例会创建一个分区功能和一个分区方案。 将创建一个新表,该表具有指定为存储位置的分区方案。

CREATE PARTITION FUNCTION myRangePF1 (datetime2(0))  
    AS RANGE RIGHT FOR VALUES ('2022-04-01', '2022-05-01', '2022-06-01') ;  
GO  

CREATE PARTITION SCHEME myRangePS1  
    AS PARTITION myRangePF1  
    ALL TO ('PRIMARY') ;  
GO  

CREATE TABLE dbo.PartitionTable (col1 datetime2(0) PRIMARY KEY, col2 char(10))  
    ON myRangePS1 (col1) ;  
GO

使用 Transact-SQL 在多个文件组上创建分区表

按照本部分中的步骤,在 SSMS 中使用 Transact-SQL 创建一个或多个文件组、相应的文件和分区表。

SQL Server和Azure SQL 托管实例都支持创建文件组和文件。 Azure SQL 托管实例自动配置添加的所有数据库文件的路径,因此ALTER DATABASE ADD FILEAzure SQL 托管实例中的命令不允许参数FILENAME。 Azure SQL数据库仅支持在PRIMARY文件组中创建分区表。 使用 Transact-SQL 在一个文件组上查找Azure SQL数据库的示例代码。

针对空数据库运行以下示例。 示例:

  • 将四个新文件组添加到数据库。
  • 将一个文件添加到每个文件组。
  • 创建一个 RANGE RIGHT 分区函数 ,该函数使用 myRangePF1 三个边界值将表分区为四个分区。
  • 创建一个称为 myRangePS1 适用于 myRangePF1 四个新文件组的分区方案。
  • 创建用于PartitionTablemyRangePS1分区的已分区col1表。
  1. “对象资源管理器” 中,连接到 数据库引擎的实例。

  2. 在标准工具栏上,选择“新建查询”。

  3. 此示例创建一个新数据库并使用它。 然后,它会创建新的文件组、分区函数和分区方案。 将创建一个新表,该表具有指定为存储位置的分区方案。 复制以下示例并将其粘贴到查询窗口中。

    如果使用托管实例,请 FILENAMEALTER DATABASE ADD FILE 命令中删除参数和关联值。 托管实例将自动确定文件路径。

    如果使用SQL Server实例,请将FILENAME参数的值自定义为适合实例的位置。

    如果要使用现有数据库,请删除 CREATE DATABASE 该命令并将 USE 语句更改为相应的数据库名称。

    SELECT 执行

    CREATE DATABASE PartitionTest;
    GO
    
    USE PartitionTest;
    GO
    
    ALTER DATABASE PartitionTest  
    ADD FILEGROUP test1fg;  
    GO  
    ALTER DATABASE PartitionTest  
    ADD FILEGROUP test2fg;  
    GO  
    ALTER DATABASE PartitionTest  
    ADD FILEGROUP test3fg;  
    GO  
    ALTER DATABASE PartitionTest  
    ADD FILEGROUP test4fg;   
    
    ALTER DATABASE PartitionTest   
    ADD FILE   
    (  
        NAME = partitiontest1,  
        FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\partitiontest1.ndf',  
        SIZE = 5MB,  
        FILEGROWTH = 5MB  
    )  
    TO FILEGROUP test1fg;  
    ALTER DATABASE PartitionTest   
    ADD FILE   
    (  
        NAME = partitiontest2,  
        FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\partitiontest2.ndf',  
        SIZE = 5MB,  
        FILEGROWTH = 5MB  
    )  
    TO FILEGROUP test2fg;  
    GO  
    ALTER DATABASE PartitionTest   
    ADD FILE   
    (  
        NAME = partitiontest3,  
        FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\partitiontest3.ndf',  
        SIZE = 5MB,  
        FILEGROWTH = 5MB  
    )  
    TO FILEGROUP test3fg;  
    GO  
    ALTER DATABASE PartitionTest   
    ADD FILE   
    (  
        NAME = partitiontest4,  
        FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\partitiontest4.ndf',  
        SIZE = 5MB,  
        FILEGROWTH = 5MB  
    )  
    TO FILEGROUP test4fg;  
    GO  
    
    CREATE PARTITION FUNCTION myRangePF1 (datetime2(0))  
        AS RANGE RIGHT FOR VALUES ('2022-04-01', '2022-05-01', '2022-06-01') ;  
    GO  
    
    CREATE PARTITION SCHEME myRangePS1  
        AS PARTITION myRangePF1  
        TO (test1fg, test2fg, test3fg, test4fg) ;  
    GO  
    
    CREATE TABLE PartitionTable (col1 datetime2(0) PRIMARY KEY, col2 char(10))  
        ON myRangePS1 (col1) ;  
    GO  
    

使用 SSMS 对表进行分区

按照本部分中的步骤(可选)创建文件组和相应的文件,然后使用SQL Server Management Studio (SSMS) 中的“创建分区向导”创建分区表或对现有表进行分区。 SSMS 中提供了用于SQL Server和Azure SQL 托管实例的“创建分区向导”。 有关Azure SQL数据库,请参阅使用 Transact-SQL 在一个文件组上创建分区表

(可选) 创建新的文件组

如果要将分区表放在一个或多个新 文件组上,请按照本部分中的步骤进行操作。 SQL Server和Azure SQL 托管实例都支持创建文件组和文件。 对于Azure SQL 托管实例,将自动为你配置创建的任何文件的路径。

  1. 在对象资源管理器中,右键单击要创建已分区表的数据库,然后选择“属性”

  2. 在“数据库属性 - database_name”对话框中的“选择页面”下,选择“文件组”

  3. “行”下,选择“ 添加”。 在新行中,输入文件组名称。

    警告

    如果指定多个文件组,则在创建分区时,除了为边界值指定的文件组数外,还必须始终具有一个额外的文件组。

  4. 继续添加行,直到为已分区表或表创建所有文件组。

  5. 选择“确定”。

  6. “选择页”下,选择 “文件”

  7. “行”下,选择“ 添加”。 在新行中,输入文件名并选择文件组。

  8. 继续添加行,直到为每个文件组至少创建了一个文件。

创建已分区表

  1. (可选)展开 “表” 文件夹,并像平常一样创建一个表。 有关详细信息,请参阅 创建表 (数据库引擎) 。 或者,可以在下一步中指定现有表。

  2. 右键单击要分区的表,指向 存储,然后选择“ 创建分区...”

  3. “创建分区向导”中的 “欢迎使用”创建分区向导 “页上,选择” 下一步”。

  4. “选择分区列” 页的 “可用分区列” 网格中,选择要对表分区的列。 “可用分区列” 网格只显示其数据类型可以用于对数据进行分区的列。 如果选择计算列作为分区列,则必须将列创建为持久列。

    可供选择的分区列和值范围主要由数据按逻辑方式可分组的范围所决定。 例如,您可以选择按一年的月份数或季度数将数据分成逻辑组。 您计划对数据进行的查询将确定此逻辑组对于管理表分区是否足够。 所有数据类型都可有效用作分区列,除了 textntextimagexmltimestampvarchar(max)nvarchar(max)varbinary(max)、别名数据类型或 CLR 用户定义的数据类型。

    此页还提供以下附加选项:

    将此表与选定的已分区表并置
    允许您选择一个已分区表,其中包含根据分区列要与此表相联接的相关数据。 对于其分区已按分区列联接的表,通常可以更有效地进行查询。

    将非唯一索引和唯一索引的存储空间调整为与索引分区列一致
    将已分区表的所有索引调整为与同一分区方案一致。 当表及其索引对齐时,可以更有效地将分区移入和移出分区表,因为数据以相同的方式进行分区。

    选择分区列和任何其他选项后,选择“ 下一步”。

  5. “选择分区函数 ”页上的 “选择分区函数”下,选择 “新建分区函数 ”或“ 现有分区”函数。 如果选择 “新建分区函数”,则输入函数的名称。 如果选择“现有分区函数”,则从列表中选择要使用的函数名称。 如果数据库中没有其他分区函数, “现有分区函数” 选项将不可用。

    完成此页后,选择“下一步”。

  6. “选择分区方案 ”页上的 “选择分区方案”下,选择 “新建分区方案 ”或“ 现有分区方案”。 如果选择 “新建分区方案”,则输入方案的名称。 如果选择“现有分区方案”,则从列表中选择要使用的方案名称。 如果数据库中没有其他分区方案, “现有分区方案” 选项将不可用。

    完成此页后,选择“下一步”。

  7. “映射分区 ”页上的 “区域”下,选择 “左边界 ”或 “右边界”。 左边界 指定将包含分区中最高的边界值。 右边界 指定每个分区中将包含最低边界值。 详细了解 Partition 函数中的左右范围。

    指定多个边界点时,除了向文件组分配边界值的行外,还必须始终输入一个额外的行。

    “选择文件组并指定边界值” 网格的 “文件组”下,选择要对数据进行分区的文件组。 在 “边界”下,输入每个文件组的边界值。 如果要将多个或所有分区分配给同一个文件组,请为每个行选择相同的文件组名称。 如果在单个行上选择文件组且边界值留空,则分区函数将使用分区函数名称将整个表或索引映射到单个分区。

    此页还提供以下附加选项:

    设置边界…
    打开 “设置边界值” 对话框可以为分区选择所需的边界值和日期范围。 仅在您选择了包含以下数据类型之一的分区列时,此选项才可用: datedatetimesmalldatetimedatetime2datetimeoffset

    预计存储空间
    估计为分区指定的每个文件组的存储空间的行计数、所需空间和可用空间。 这些值将以只读值形式显示在网格中。

    “设置边界值” 对话框允许包含以下附加选项:

    开始日期
    选择分区范围值的开始日期。

    结束日期
    选择分区范围值的结束日期。 如果在“映射分区”页上选择了“左边界”,此日期将是每个文件组/分区的最后一个值。 如果在“映射分区”页上选择了“右边界”,此日期将是倒数第二个文件组中的第一个值。

    日期范围
    为每个分区选择所需的日期粒度或范围值增量。

    完成此页后,选择“下一步”。

  8. “选择输出选项” 页上,指定要如何完成已分区表。 选择 “创建脚本” 可以基于向导中的前一页创建 SQL 脚本。 选择 “立即运行” 可以在完成向导中的其余页后创建新的已分区表。 选择 “计划” 可以在将来的预定时间创建新的已分区表。

    如果选择 “创建脚本”“脚本选项” 下的以下选项将可用:

    将脚本保存到文件
    将脚本生成为 .sql 文件。 在“文件名”框中输入文件名和位置,或选择“浏览”以打开“脚本文件位置”对话框 。 从 “另存为” 选择 “Unicode 文本”“ANSI 文本”

    将脚本保存到剪贴板
    将脚本保存到剪贴板。

    将脚本保存到“新建查询”窗口
    将脚本生成到新的查询编辑器窗口。 这是默认选项。

    如果选择“计划”,则选择“更改计划” 。

    1. 在“新建作业计划”对话框的“名称”框中,输入作业计划的名称 。

    2. “计划类型” 列表中选择计划类型:

      • SQL Server 代理启动时自动启动

      • CPU 空闲时启动

      • 重复执行。 如果新的已分区表定期使用新信息更新,请选择此选项。

      • 执行一次。 这是默认选项。

    3. 选择或清除 “已启用” 复选框以启用或禁用计划。

    4. 如果选择 “重复执行”

      1. “频率” 下的 “执行” 列表中,指定执行的频率:

        • 如果选择 “每天” ,请在 “执行间隔” 框中输入重复作业计划的频率(天)。

        • 如果选择 “每周” ,请在 “执行间隔” 框中输入重复作业计划的频率(周)。 选择运行作业计划的一周中的某天或某些天。

        • 如果选择 “每月” ,可以选择 “天”“特定日期”

          • 如果选择 “天” ,请输入要运行作业计划的当月日期和作业计划的重复频率(月)。 例如,如果要每隔一个月在当月的 15 日运行计划作业,请选择“天”,在第一个框中输入“15”,在第二个框中输入“2”。 第二个框中允许的最大数字是“99”。

          • 如果选择 “特定日期” ,请选择要运行作业计划的当月内一周的特定一天和作业计划的重复频率(月)。 例如,如果要每隔一个月在当月的最后一个工作日运行作业计划,请选择“天”,从第一个列表中选择“最后一周”,从第二个列表中选择“工作日”,然后在最后一个框中输入“2” 。 还可以从前两个列表中选择“第一周”、“第二周”、“第三周”或“第四周”以及特定工作日(例如:星期日或星期三)。 最后一个框中允许的最大数字是“99”。

      2. “每天频率” 下,指定作业计划运行的当天作业计划的重复频率。

        • 如果选择 “执行一次,时间为:” ,请在 “执行一次,时间为:” 框中输入运行作业计划的当天的特定时间。 输入当天的小时、分钟和秒以及 AM 或 PM。

        • 如果选择 “执行间隔” ,请在 “频率” 下指定所选日运行作业计划的频率。 例如,如果要在运行作业计划的当天每隔 2 小时重复一次,请选择“执行间隔”,在第一个框中输入“2”,然后从列表中选择“小时” 。 从此列表中还可以选择“分钟”和“秒”。 第一个框中允许的最大数字是“100”。

          “开始时间” 框中,输入开始运行作业计划的时间。 在 “结束时间” 框中,输入停止重复作业计划的时间。 输入当天的小时、分钟和秒以及 AM 或 PM。

      3. “持续时间” 下的 “开始日期” 中,输入希望作业计划开始运行的日期。 选择 “结束日期”“无结束日期” 以指示作业计划应在何时停止运行。 如果选择 “结束日期” ,输入希望作业计划停止运行的日期。

    5. 如果选择“执行一次”,请在“执行一次”下的“日期”框中输入将运行作业计划的日期。 在 “时间” 框中,输入将运行作业计划的时间。 输入当天的小时、分钟和秒以及 AM 或 PM。

    6. “摘要” 下的 “说明” 中,验证所有作业计划设置均正确。

    7. 选择“确定”。

    完成此页后,选择“下一步”。

  9. “检查摘要” 页的 “检查所做选择”下,展开所有可用选项以验证所有分区设置是正确的。 如果一切正常,请选择“完成”。

  10. “创建分区向导进度” 页上,监视有关创建分区向导的操作的状态信息。 根据在向导中选择的选项,“进度”页可能会包含一个操作或多个操作。 最上面的方框显示向导的总体状态和向导已接收到的状态、错误和警告消息数。

    “创建分区向导进度” 页上提供以下选项:

    详细信息
    提供向导执行的操作所返回的操作、状态和所有消息。

    Action
    指定每个操作的类型和名称。

    Status
    指示向导操作作为一个整体返回的值是“成功”还是“失败”。

    消息
    提供从该进程中返回的任何错误或警告消息。

    Report
    创建包含创建分区向导结果的报告。 这些选项是 “查看报告”“将报告保存到文件”“将报告复制到剪贴板”“将报告作为电子邮件发送”

    查看报告
    打开“查看报告”对话框,其中包含关于创建分区向导进度的文本报告。

    将报告保存到文件
    打开“将报告另存为”对话框。

    将报告复制到剪贴板
    将向导的进度报告结果复制到剪贴板。

    “将报告作为电子邮件发送”
    将向导的进度报告结果复制到电子邮件。

    完成后,选择“关闭”。

创建分区向导将创建分区函数和方案,然后将分区应用于指定的表。 若要验证表分区,请在对象资源管理器中,右键单击表,然后选择“属性”。 选择 “存储 ”页。 该页面将显示分区函数和方案的名称以及分区数目之类的信息。

查询已分区表和索引的元数据

可以查询元数据以确定表是否已分区、已分区表的边界点、已分区表的分区列、每个分区中的行数,以及是否已在分区上实现 数据压缩

确定表是否已分区

如果对表 PartitionTable 进行了分区,或者对表的任何非聚集索引进行分区,则以下查询将返回一行或多行。 如果未对表进行分区,并且对表没有非聚集索引进行分区,则不返回任何行。

SELECT SCHEMA_NAME(t.schema_id) AS SchemaName, *   
FROM sys.tables AS t   
JOIN sys.indexes AS i   
    ON t.[object_id] = i.[object_id]   
JOIN sys.partition_schemes ps   
    ON i.data_space_id = ps.data_space_id   
WHERE t.name = 'PartitionTable';   
GO  

确定已分区表的边界值

以下查询对于 PartitionTable 表中的每个分区返回边界值。

查询使用 typesys.indexes 中的列仅返回表的聚集索引的信息;如果表是 ,则返回基表的信息。 若要在查询结果中包含任何分区的非聚集索引,请从查询中删除或注释掉 AND i.type <= 1

SELECT SCHEMA_NAME(t.schema_id) AS SchemaName, t.name AS TableName, i.name AS IndexName, 
    p.partition_number, p.partition_id, i.data_space_id, f.function_id, f.type_desc, 
    r.boundary_id, r.value AS BoundaryValue   
FROM sys.tables AS t  
JOIN sys.indexes AS i  
    ON t.object_id = i.object_id  
JOIN sys.partitions AS p  
    ON i.object_id = p.object_id AND i.index_id = p.index_id   
JOIN  sys.partition_schemes AS s   
    ON i.data_space_id = s.data_space_id  
JOIN sys.partition_functions AS f   
    ON s.function_id = f.function_id  
LEFT JOIN sys.partition_range_values AS r   
    ON f.function_id = r.function_id and r.boundary_id = p.partition_number  
WHERE 
    t.name = 'PartitionTable' 
    AND i.type <= 1  
ORDER BY SchemaName, t.name, i.name, p.partition_number;  

确定已分区表的分区列

以下查询返回表 PartitionTable 的分区列的名称。

查询使用 typesys.indexes 中的列仅返回表的聚集索引的信息;如果表是 ,则返回基表的信息。 若要在查询结果中包含任何分区的非聚集索引,请从查询中删除或注释掉 AND i.type <= 1


SELECT   
    t.[object_id] AS ObjectID
    , SCHEMA_NAME(t.schema_id) AS SchemaName
    , t.name AS TableName   
    , ic.column_id AS PartitioningColumnID   
    , c.name AS PartitioningColumnName
    , i.name as IndexName
FROM sys.tables AS t   
JOIN sys.indexes AS i   
    ON t.[object_id] = i.[object_id]   
    AND i.[type] <= 1 -- clustered index or a heap   
JOIN sys.partition_schemes AS ps   
    ON ps.data_space_id = i.data_space_id   
JOIN sys.index_columns AS ic   
    ON ic.[object_id] = i.[object_id]   
    AND ic.index_id = i.index_id   
    AND ic.partition_ordinal >= 1 -- because 0 = non-partitioning column   
JOIN sys.columns AS c   
    ON t.[object_id] = c.[object_id]   
    AND ic.column_id = c.column_id   
WHERE t.name = 'PartitionTable';   
GO  

确定行描述每个分区中可能的值范围

以下查询按表 PartitionTable的分区返回行,以及正在使用的分区函数的“比较运算符”的说明。 Kalen Delaney 提供的原始查询。

查询使用 typesys.indexes 中的列仅返回表的聚集索引的信息;如果表是 ,则返回基表的信息。 若要在查询结果中包含任何分区的非聚集索引,请从查询中删除或注释掉 AND i.type <= 1

SELECT SCHEMA_NAME(t.schema_id) AS SchemaName, t.name AS TableName, i.name AS IndexName, 
    p.partition_number AS PartitionNumber, f.name AS PartitionFunctionName, p.rows AS Rows, rv.value AS BoundaryValue, 
CASE WHEN ISNULL(rv.value, rv2.value) IS NULL THEN 'N/A' 
ELSE
    CASE WHEN f.boundary_value_on_right = 0 AND rv2.value IS NULL THEN '>=' 
        WHEN f.boundary_value_on_right = 0 THEN '>' 
        ELSE '>=' 
    END + ' ' + ISNULL(CONVERT(varchar(64), rv2.value), 'Min Value') + ' ' + 
        CASE f.boundary_value_on_right WHEN 1 THEN 'and <' 
                ELSE 'and <=' END 
        + ' ' + ISNULL(CONVERT(varchar(64), rv.value), 'Max Value') 
END AS TextComparison
FROM sys.tables AS t  
JOIN sys.indexes AS i  
    ON t.object_id = i.object_id  
JOIN sys.partitions AS p  
    ON i.object_id = p.object_id AND i.index_id = p.index_id   
JOIN  sys.partition_schemes AS s   
    ON i.data_space_id = s.data_space_id  
JOIN sys.partition_functions AS f   
    ON s.function_id = f.function_id  
LEFT JOIN sys.partition_range_values AS r   
    ON f.function_id = r.function_id and r.boundary_id = p.partition_number  
LEFT JOIN sys.partition_range_values AS rv
    ON f.function_id = rv.function_id
    AND p.partition_number = rv.boundary_id     
LEFT JOIN sys.partition_range_values AS rv2
    ON f.function_id = rv2.function_id
    AND p.partition_number - 1= rv2.boundary_id
WHERE 
    t.name = 'PartitionTable'
    AND i.type <= 1 
ORDER BY t.name, p.partition_number;

TextComparison 列根据 分区函数的定义描述每个分区中可能的值范围。 下面是查询示例结果的视图:

SchemaName TableName IndexName PartitionNumber PartitionFunctionName BoundaryValue TextComparison
dbo PartitionTable PK_PartitionTable 1 PFTest 0 2022-03-01 00:00:00.000 >= 最小值和 < Mar 1 2022 12:00AM
dbo PartitionTable PK_PartitionTable 2 PFTest 2 2022-04-01 00:00:00.000 >= 2022 年 3 月 1 日 12:00AM 和 < Apr 1 2022 12:00AM
dbo PartitionTable PK_PartitionTable 3 PFTest 1 2022-05-01 00:00:00.000 >= 2022 年 4 月 1 日 12:00AM 和 < May 1 2022 12:00AM
dbo PartitionTable PK_PartitionTable 4 PFTest 0 2022-06-01 00:00:00.000 >= 2022 年 5 月 1 日 12:00AM 和 < Jun 1 2022 12:00AM
dbo PartitionTable PK_PartitionTable 5 PFTest 1 2022-07-01 00:00:00.000 >= Jun 1 2022 12:00AM 和 < Jul 1 2022 12:00AM
dbo PartitionTable PK_PartitionTable 6 PFTest 0 Null >= Jul 1 2022 12:00AM 和 < 最大值

限制

了解限制分区的限制和性能注意事项

后续步骤

通过以下文章详细了解相关概念: