建立分區函數/配置/表只是起點。隨著資料增長、保留策略變更、歸檔需求,必須頻繁執行分割、合併、切換操作。SSMS「管理分區」介面僅供檢視,實際操作需靠 T-SQL。
將現有分區在指定邊界點一分為二,必須同步指定新分區的檔案群組:
-- 1. 先告訴配置方案下一個分區用哪個檔案群組
ALTER PARTITION SCHEME [MyPartitionScheme] NEXT USED [PRIMARY];
-- 2. 在分區函數執行分割,指定新邊界值
ALTER PARTITION FUNCTION MyPartitionFunction() SPLIT RANGE (5000);
⚠️ 新分區的非叢集索引壓縮屬性會重置為 NONE,需事後重建壓縮。
移除邊界點,將相鄰兩分區合併,不需變更配置方案:
ALTER PARTITION FUNCTION MyPartitionFunction() MERGE RANGE (5000);
將來源表的某分區瞬間切換到目標表對應分區,**僅更新中繼資料,不移動資料頁**,百萬列級別通常 < 1 秒完成。
前置條件 (缺一不可):
-- 將 STable 第 2 分區切換到 DTable 第 2 分區
ALTER TABLE [STable] SWITCH PARTITION 2 TO [DTable] PARTITION 2;
| 操作 | 耗時特徵 | 影響因素 |
|---|---|---|
| SPLIT 分割 | 中等 | 被分割分區資料量越大越慢 (需移動資料頁至新分區) |
| MERGE 合併 | 視資料而定 | 雙空極快;雙有資料同分割;單側有資料時,右側大資料量較快,左側大資料量較慢 (內部實現差異) |
| SWITCH 切換 | 極快 (亞秒級) | 純中繼資料操作,與資料量無關 |
sys.partition_schemes:分區配置方案與對應函數 ID。sys.partition_functions:分區函數定義、分區數。sys.partition_range_values:每個邊界值與所屬函數 ID。
SELECT prv.value
FROM sys.partition_range_values prv
JOIN sys.partition_functions pf ON pf.function_id = prv.function_id
WHERE pf.name = 'MyPartitionFunc' AND prv.boundary_id = 1;
SELECT
$PARTITION.MyPartitionFunc(PartitionDate) AS PartitionNum,
COUNT(*) AS RowCount,
MIN(PartitionDate) AS MinValue,
MAX(PartitionDate) AS MaxValue
FROM MyTable
GROUP BY $PARTITION.MyPartitionFunc(PartitionDate)
ORDER BY PartitionNum;
UPDATE STATISTICS 確保查詢計畫準確。分區管理的核心是「中繼資料操作替代資料移動」。熟練掌握 SPLIT/MERGE/SWITCH 三板斧,配合監控查詢與滑動窗口策略,即可輕鬆駕馭 TB 級資料表的全生命週期維運。