對齊定義
索引與基表對齊,不需同名分區函數,但分區函數在實質上必須相同:資料類型相同、分區數相同、邊界值相同。
驗證實驗
- 建立兩組同樣定義的分區函數/方案:
Fun_TestUnique_Id / Sch_TestUnique_Id 及 Fun_TestUnique_SiteId / Sch_TestUnique_SiteId (皆 INT、3 分區、邊界 10M/20M)。
- 建立表
TestUnique,叢集索引 PK(Id) ON Sch_TestUnique_Id(Id)。
- 建立唯一非叢集索引
UQ(SiteId, Url) ON Sch_TestUnique_SiteId(SiteId)。
- 驗證:兩分區函數滿足三條件 → 索引與基表 對齊成功,支援 SWITCH。
關鍵 DDL 腳本
-- 分區函數與方案 (兩組完全相同定義)
CREATE PARTITION FUNCTION Fun_TestUnique_Id(INT) AS RANGE RIGHT FOR VALUES (10000000, 20000000);
CREATE PARTITION SCHEME Sch_TestUnique_Id AS PARTITION Fun_TestUnique_Id TO (FG1, FG2, FG3);
CREATE PARTITION FUNCTION Fun_TestUnique_SiteId(INT) AS RANGE RIGHT FOR VALUES (10000000, 20000000);
CREATE PARTITION SCHEME Sch_TestUnique_SiteId AS PARTITION Fun_TestUnique_SiteId TO (FG1, FG2, FG3);
-- 表與索引
CREATE TABLE TestUnique (
Id INT IDENTITY(600000000,1) NOT NULL,
SiteId INT NULL, Url NVARCHAR(420) NULL,
CONSTRAINT PK_TestUnique PRIMARY KEY CLUSTERED (Id) ON Sch_TestUnique_Id(Id)
) ON Sch_TestUnique_Id(Id);
CREATE UNIQUE NONCLUSTERED INDEX UQ_SiteId_Url ON TestUnique (SiteId, Url) ON Sch_TestUnique_SiteId(SiteId);
對齊帶來的能力
ALTER TABLE ... SWITCH PARTITION 快速載入/歸檔。
- 分區級索引重建/重組 (
REBUILD PARTITION = n)。
- 查詢優化器分區裁剪。