SQL Server 表分区脚本

下面给你 最完整、可直接执行的 SQL Server 表分区脚本
并且是按你的字段 CreateDate(创建时间)进行分区

我会给你 从零开始的 3 个步骤:

  1. 创建分区函数(Partition Function)
  2. 创建分区方案(Partition Scheme)
  3. 创建一个按 CreateDate 分区的表
    4.(可选)已有表改为分区表的脚本

你直接复制就能用。


✅ 1. 创建分区函数(按 CreateDate 切分)

这里假设你按 年份 来做分区,例如:

  • < 2022
  • 2022
  • 2023
  • 2024
  • 2025
  • = 2025

你可以按需调整分区边界。

-- 1. 创建分区函数(按 CreateDate 分区) CREATE PARTITION FUNCTION PF_CreateDate (datetime) AS RANGE RIGHT FOR VALUES (     ('2022-01-01'),     ('2023-01-01'),     ('2024-01-01'),     ('2025-01-01') ); 

❗说明

  • RANGE RIGHT 表示边界值属于右侧分区
    例如 2022-01-01 属于分区2
  • 边界你可以自行调整,比如按月份也可以。

✅ 2. 创建分区方案(全部放在 PRIMARY 文件组)

如果你没有建立多个 FileGroup,简单做法就是全部放在 PRIMARY 也可以正常分区。

-- 2. 创建分区方案 CREATE PARTITION SCHEME PS_CreateDate AS PARTITION PF_CreateDate TO (     [PRIMARY],      [PRIMARY],      [PRIMARY],      [PRIMARY],      [PRIMARY] ); 

如果你有多个 filegroup,我可以帮你按年度自动生成脚本(告诉我文件组名即可)。


✅ 3. 创建按 CreateDate 分区的新表

-- 3. 创建按 CreateDate 分区的表 CREATE TABLE Orders (     Id BIGINT IDENTITY(1,1) PRIMARY KEY,     OrderNo NVARCHAR(50),     Amount DECIMAL(18,2),     CreateDate DATETIME NOT NULL ) ON PS_CreateDate (CreateDate); 

关键点:
ON PS_CreateDate (CreateDate) 指定表按分区方案存储。


🟦(可选)已有表转换为分区表(必须重建聚集索引)

假设你已有表:Orders

4-1 删除原有聚集索引(可能是 PK)

如果 PK 是聚集索引:

ALTER TABLE Orders DROP CONSTRAINT PK_Orders; 

如果不是 PK,而是单纯的聚集索引:

DROP INDEX IX_Orders ON Orders; 

4-2 创建按分区方案的聚集索引

CREATE CLUSTERED INDEX CIX_Orders_CreateDate ON Orders(CreateDate) ON PS_CreateDate(CreateDate); 

这样你的原有表就正式变成了 按 CreateDate 分区表


🔍 查看分区情况

SELECT      $PARTITION.PF_CreateDate(CreateDate) AS PartitionID,     COUNT(*) AS RowsCount FROM Orders GROUP BY $PARTITION.PF_CreateDate(CreateDate) ORDER BY PartitionID; 

可看到每个分区的行数。


发表评论

您必须 [ 登录 ] 才能发表留言!

相关文章