SQL Server 表分区脚本

下面给你 最完整、可直接执行的 SQL Server 表分区脚本

并且是按你的字段 CreateDate(创建时间)进行分区

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

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

你直接复制就能用。


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

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

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

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

sql 复制代码
-- 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 也可以正常分区。

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

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


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

sql 复制代码
-- 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 是聚集索引:

sql 复制代码
ALTER TABLE Orders DROP CONSTRAINT PK_Orders;

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

sql 复制代码
DROP INDEX IX_Orders ON Orders;

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

sql 复制代码
CREATE CLUSTERED INDEX CIX_Orders_CreateDate
ON Orders(CreateDate)
ON PS_CreateDate(CreateDate);

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


🔍 查看分区情况

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

可看到每个分区的行数。


相关推荐
yhole27 分钟前
SQL中的REGEXP正则表达式使用指南
数据库·sql·正则表达式
探索宇宙真理.2 小时前
SiYuan SQL漏洞 | CVE-2026-29073复现&研究
数据库·经验分享·sql·eureka·安全漏洞·siyuan
想七想八不如114084 小时前
SQL操作学习
数据库·sql·学习
短剑重铸之日6 小时前
《ShardingSphere解读》16 改写引擎:如何理解装饰器模式下的 SQL 改写实现机制?
java·数据库·后端·sql·shardingsphere·分库分表·装饰器模式
umeelove357 小时前
SQL中的DISTINCT、SQL DISTINCT详解、DISTINCT的用法、DISTINCT注意事项
java·数据库·sql
@insist1237 小时前
数据库系统工程师-嵌入式 SQL 与存储过程核心原理与应试指南
数据库·sql·软考·数据库系统工程师·软件水平考试
zjneymar8 小时前
Mybatis的动态sql
java·sql·mybatis
勇者无畏4048 小时前
基于 Spring AI Alibaba 搭建 Text-To-SQL 智能系统(简单实现)
数据库·sql
lifewange9 小时前
SQL中的聚合函数有哪些
android·数据库·sql
短剑重铸之日10 小时前
《ShardingSphere解读》12 解析引擎:SQL 解析流程应该包括哪些核心阶段?(下)
数据库·后端·sql·架构·shardingsphere·分库分表