SQL Server 叢集索引vs非叢集索引

為了能讓資料庫提升資料搜查效率,我們能透過建立索引去調整搜尋。

索引

索引是一種與資料表或檢視有關的磁碟內存結構,它會加快從該資料表或檢視中擷取資料列的速度。 索引中包含從資料表或檢視中一或多個資料行建出的索引鍵。 這些索引鍵儲存在結構 (B 型樹狀結構) 中,讓 SQL Server 可以快速有效地尋找與索引鍵值相關的一個或多個資料列。

叢集vs非叢集

比較 叢集索引
Clustered Index
非叢集索引
NonClustered Index
解釋 1.叢集索引將資料表或檢視中的資料列依其索引鍵值排序與儲存。 這些就是索引定義中包含的資料行。 因為資料列本身只能以一種順序排序,所以每個資料表只能有一個叢集索引。
2.只有當資料表包含叢集索引時,資料表中的資料列才會以排序順序儲存。 當資料表有叢集索引時,資料表又稱為叢集資料表。 如果資料表沒有任何叢集索引,它的資料列就儲存在未排序的結構中,這個結構稱為堆積。
1.非叢集索引有一個與資料列完全分開的結構。 非叢集索引包含非叢集索引鍵值,而每個索引鍵值項目都有一個指標,指向包含索引鍵值的資料列。
2.從非叢集索引中的索引列指向資料列的指標被稱為資料列定位器。 資料列定位器的結構須視資料頁儲存在堆積或叢集資料表而定。 若是堆積,資料列定位器是指向資料列的指標。 若是叢集資料表,資料列定位器就是叢集索引鍵。
3.您可以將非索引鍵之資料行新增至非叢集索引的分葉層級中,以規避現有索引鍵的限制,並執行完全涵蓋的索引查詢。 如需詳細資訊,請參閱 使用內含資料行建立索引。 如需索引鍵限制的詳細資訊,請參閱SQL Server的容量規格上限。
注意 1.一個資料表只能有一個「叢集索引」,因為實體資料列的排列順序不可能有多種。
2.如果在SQL Server主索引鍵(PK)會預設為叢集索引,如果要更改為其他叢集索引就必須先取消PK的叢集索引。
3.不可用於(image/text/xml/max 型態,如 varchar(max))型態
4.每個索引最多可以包括 16 個欄位
1.一個資料表可以有多個非叢集索引。
2.每個索引最多可以包括 16 個欄位
常用於 1.常被引用為外來鍵的欄位
2.最常被搜尋的日期欄位
3.常被用來 ORDER BY 或是 GROUP BY 的欄位
1.為了改善叢集索引未涵蓋但經常使用之查詢的效能

參考資料