為了能讓資料庫提升資料搜查效率,我們能透過建立索引去調整搜尋。
索引
索引是一種與資料表或檢視有關的磁碟內存結構,它會加快從該資料表或檢視中擷取資料列的速度。 索引中包含從資料表或檢視中一或多個資料行建出的索引鍵。 這些索引鍵儲存在結構 (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.為了改善叢集索引未涵蓋但經常使用之查詢的效能 |