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;

可看到每个分区的行数。


相关推荐
XDHCOM6 小时前
PostgreSQL 25001: active_sql_transaction 报错原因分析,故障修复步骤详解,远程处理解决方案
数据库·sql·postgresql
祖传F8710 小时前
quickbi数据集数据查询时间字段显示正确,仪表板不显示
数据库·sql·阿里云
悟道子HD11 小时前
SRC漏洞挖掘——2.SQL注入漏洞实战详解
sql·web安全·网络安全·渗透测试·sql注入·sqlmap·暴力破解
需要点灵感13 小时前
SQL Server 存储过程语法整理
数据库·sql
沃尔威武14 小时前
性能调优实战:从火焰图定位到SQL优化的全流程
android·数据库·sql
数厘14 小时前
2.7SQL 四大分类:理解与避坑
数据库·sql
XDHCOM15 小时前
ORA-31215: DBMS_LDAP PL/SQL无效LDAP修改值,Oracle报错故障修复与远程处理方案,快速解决连接配置难题
数据库·sql·oracle
rockey62715 小时前
AScript动态脚本多语言环境支持
sql·c#·.net·script·eval·function·动态脚本
逆境不可逃17 小时前
高频 SQL 50 题 之 连接篇 1378 1068 1581 197 1661 577 1280 570 1934
数据库·sql
A__tao19 小时前
一键实现 SQL 转 Elasticsearch Mapping(支持字段注释 + meta 描述)
数据库·sql·elasticsearch