[点晴永久免费OA]SQL Server 2008以上版本普通表和分区表之间切换数据(分区交换)
|
admin
2026年4月2日 10:42
本文热度 55
|
SQL Server分区切换(Partition Switching也叫分区交换)是一种高效的元数据操作,用于在普通表与分区表的指定分区之间快速转移数据,适合历史数据的快速迁移维护操作。其实Oracle等其它数据库也具备相似功能,原理大同小异。
普通表 ↔ 分区表之间的双向切换限制
结构一致性:表结构(包括聚簇索引、非聚集索引、约束)必须相同。
分区对齐:切换到分区表时,普通表的数据必须完全符合目标分区的分区键范围。
索引对齐:如果分区表有对齐索引,普通表也需建立相同索引。
约束要求:普通表需添加 CHECK约束,限制分区键范围与目标分区一致(分区切换时 SQL Server 会检查约束)。
操作期间会获取架构锁,但数据不移动,仅修改元数据,所以比insert into等迁移数据的方法快很多。
CREATE TABLE dbo.Sales ( SaleID INT PRIMARY KEY, SaleDate DATE, Amount DECIMAL(10,2));
INSERT INTO dbo.Sales VALUES (1, '2024-01-15', 100), (2, '2024-01-20', 200);select * from dbo.Sales;
CREATE PARTITION FUNCTION pf_Monthly (DATE) AS RANGE RIGHT FOR VALUES ('2024-02-01', '2024-03-01'); CREATE PARTITION SCHEME ps_Monthly AS PARTITION pf_Monthly ALL TO ([PRIMARY]);
CREATE TABLE dbo.Sales_Partitioned ( SaleID INT, SaleDate DATE, Amount DECIMAL(10,2)) ON ps_Monthly(SaleDate);
ALTER TABLE dbo.Sales ADD CONSTRAINT CK_Sales_SaleDate CHECK (SaleDate < '2024-02-01');
ALTER TABLE dbo.Sales SWITCH TO dbo.Sales_Partitioned PARTITION 1;select * from dbo.Sales_Partitioned;
ALTER TABLE dbo.Sales_Partitioned SWITCH PARTITION 1 TO dbo.Sales;select * from dbo.Sales_Partitioned;select * from dbo.Sales;
该文章在 2026/4/2 12:42:42 编辑过