下面给你 最完整、可直接执行的 SQL Server 表分区脚本,
并且是按你的字段 CreateDate(创建时间)进行分区。
我会给你 从零开始的 3 个步骤:
- 创建分区函数(Partition Function)
- 创建分区方案(Partition Scheme)
- 创建一个按
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;
可看到每个分区的行数。
浙公网安备 33010602011771号