CREATE INDEX 是建立索引的核心 T-SQL 指令。本文系統解析完整語法與每個參數:UNIQUE (唯一)、CLUSTERED/NONCLUSTERED (叢集/非叢集)、index_name、table/view、column [ASC|DESC] (最多 16 欄位、總長 ≤ 900 bytes)、PAD_INDEX、FILLFACTOR、IGNORE_DUP_KEY、DROP_EXISTING、STATISTICS_NORECOMPUTE、SORT_IN_TEMPDB、ON filegroup、INCLUDE (包含欄位建立覆蓋索引)、WHERE (篩選索引)、ONLINE (線上建立)、DATA_COMPRESSION (資料壓縮)。並說明叢集索引重組資料物理順序、非叢集索引葉節點存鍵值+行定位器 (叢集鍵/RID) 的架構差異。
| 參數 | 功能 | 典型值/建議 |
|---|---|---|
| UNIQUE | 強制鍵值唯一 | 業務鍵天然唯一時啟用 |
| CLUSTERED | 資料依索引鍵物理排序 | 每表僅一個,窄/唯一/遞增最佳 |
| NONCLUSTERED | 獨立索引結構,葉存鍵值+定位器 | 預設,支援多個 |
| FILLFACTOR (0-100) | 葉層頁面填滿百分比 | 高修改表 70-90,唯讀 100 |
| PAD_INDEX | 中間層同樣套用 Fill Factor | ON 配合 Fill Factor |
| IGNORE_DUP_KEY | 唯一索引重複值僅警告不報錯 | ETL 階段臨時啟用 |
| DROP_EXISTING | 重建時刪除同名現有索引 | ALTER INDEX REBUILD 替代 |
| INCLUDE (col...) | 非鍵包含欄位,建立覆蓋索引 | 避免 Key Lookup 關鍵 |
| WHERE predicate | 篩選索引,僅索引符合條件列 | 稀疏查詢 (如 WHERE Status=1) |
| ONLINE = ON | 企業版功能,建立過程不鎖定表 | 生產環境大表必備 |
掌握完整語法與參數含義,能精準建立高效索引應對多樣查詢負載。