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 編輯過