[食譜好菜] Clustered Index 與 Non-Clustered Index 不同之處

今天在建 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。

參考資料

相關資源

C# 指南
ASP.NET 教學
ASP.NET MVC 指引
Azure SQL Database 教學
SQL Server 教學
Xamarin.Forms 教學