今天在建 SQL Index 時又在 Clustered Index 與 Non-Clustered Index 之間徘徊了,每每遇到時都忘記了這兩個之間的差別,爬文後記錄這兩者的差異,避免以後我再度忘記。
幾個問題簡單區別
Clustered Index | Non-Clustered Index | |
每一個 Table 能有幾個? | 1 個 | 多個 |
Table 是否會依照所建立的 Index 方式排序? | 會 | 不會 |
是否需要額外的 Lookup Operations? | 不需要 | 需要 |
使用時機
使用 Clustered Index | 使用 Non-Clustered Index | |
欄位經常被分組排序 | 適合 | 不適合 |
回傳某個範圍內的資料 | 適合 | 不適合 |
欄位值一個或極少相異 | 不適合 | 不適合 |
欄位值少量相異 | 適合 | 不適合 |
欄位值大量相異 | 不適合 | 適合 |
欄位值頻繁地被更新 | 不適合 | 適合 |
欄位為外鍵 | 適合 | 適合 |
欄位為主鍵 | 適合 | 適合 |
索引欄位頻繁地被修改 | 不適合 | 適合 |
總結
- Clustered Index: 每個 Table 只能有一個 Clustered Index,Table 資料就會依據 Clustered Index 的方式排列,這好比書籍的目錄,每本書只能有一個目錄,因為整本書會依照這個目錄排序。
- Non-Clustered index: 每個 Table 能有許多 Non-Clustered Index,這好比書集後面的索引目錄,每本書可以有很多種索引目錄,例如依照字母排序、依照附錄A、依照附錄B。