資料以 8 KB 頁面儲存;索引是有序的指標結構,讓引擎透過 B+ 樹快速定位資料頁,避免全表掃描。好比漢語字典的拼音/筆劃/部首檢字表,根據不同排序滿足不同查詢路徑。
| 類型 | 定義 | 限制 | 典型用途 |
|---|---|---|---|
| 唯一索引 | 鍵值不可重複,允許單一 NULL | 資料已有重複值則無法建立 | 業務鍵(身分證、Email、帳號) |
| 主鍵索引 | 唯一索引特例,不可為 NULL,預設為叢集索引 | 每表僅一個 | 實體識別欄(ID、Sno) |
| 叢集索引 | 資料頁物理順序 = 索引邏輯順序,每表僅一個 | 寬鍵值導致非叢集索引膨脹 | 範圍查詢頻繁、排序固定的欄位(建立日期、流水號) |
| 非叢集索引 | 邏輯順序與物理順序分離,葉層存行定位器(RID 或叢集鍵),每表 ≤ 999 個 | 書籤查找開銷大 | 高選擇性點查、JOIN/WHERE 條件欄位、覆蓋索引 |
NONCLUSTERED。CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED] INDEX index_name
ON schema.table (column_name [ASC | DESC] [, ...n])
[INCLUDE (column_name [, ...n])] -- 覆蓋索引:非鍵欄位僅存葉層
[WHERE ] -- 篩選索引(SQL 2008+)
[WITH (
FILLFACTOR = 80, -- 頁面填滿百分比,預留分頁空間
PAD_INDEX = ON, -- 中繼層也套用 FILLFACTOR
SORT_IN_TEMPDB = ON, -- 排序暫存放 tempdb,減少用戶資料庫記錄
ONLINE = ON, -- Enterprise 版:建立過程不鎖表
DATA_COMPRESSION = PAGE -- 頁面壓縮節省空間
)];
GO
| 優點 | 缺點 |
|---|---|
|
|
sys.dm_db_index_physical_stats 檢測碎片 > 30% → REBUILD;10%-30% → REORGANIZE;同步更新統計資料。WHERE status = 1 只索引作用中列,大幅縮小體積。索引是資料庫效能的杠桿,用得好撬起千鈞查詢,用不好拖垮寫入吞吐。遵循「測量→建立→驗證→維護」閉環,方能長治久安。