建立叢集索引

除了極少數的例外狀況之外,每個資料表都應該要有叢集索引。除了可以改善查詢效能以外,叢集索引還能夠視需要加以重建或重新組織,以便控制資料表分散程度。檢視上也可以建立叢集索引。

典型實作

實作叢集索引的方法如下:

  • PRIMARY KEY 與 UNIQUE 條件約束

    當您建立 PRIMARY KEY 條件約束時,如果資料表上的叢集索引尚未存在,而且您未並指定唯一的非叢集索引,則會在資料行上自動建立唯一的叢集索引。主索引鍵資料行不允許 NULL 值。

    當您建立 UNIQUE 條件約束時,依預設會建立唯一的非叢集索引,以強制 UNIQUE 條件約束。若資料表上還沒有叢集索引,您可以指定唯一叢集索引。

    隨條件約束一起建立的索引,會自動採用與條件約束名稱相同的名稱。如需詳細資訊,請參閱<PRIMARY KEY 條件約束>與<UNIQUE 條件約束>。

  • 獨立於條件限制之外的索引

    如果已指定非叢集的主索引鍵條件約束,您可以在主索引鍵資料行以外的資料行上建立叢集索引。

  • 索引檢視

    若要建立索引檢視,您必須在一或多個檢視資料行上定義唯一的叢集索引。檢視將會具體化,而結果集會以資料表資料儲存在叢集索引中的相同方式,儲存在索引的分葉層級。如需詳細資訊,請參閱<建立索引檢視>。

選取索引鍵資料行

因為每個資料表僅能有一個叢集索引,所以決定要在哪些資料行上建立叢集索引便非常重要。如需選取正確資料行的詳細資訊,請參閱<叢集索引設計指導方針>。

叢集索引的索引鍵不能包含在 ROW_OVERFLOW_DATA 配置單位中已有資料的 varchar 資料行。如果在 varchar 資料行上建立叢集索引,而 IN_ROW_DATA 配置單位中已有資料,則後續將資料推離資料列的插入或更新動作將會失敗。如需配置單位的詳細資訊,請參閱<資料表與索引組織>。

磁碟空間需求

建立叢集索引結構時,個別的檔案和檔案群組中都必須有磁碟空間來保存舊 (來源) 結構和新 (目標) 結構。除非認可整個交易,否則舊結構的配置不會取消。此外,可能還需要額外的暫存磁碟空間以供排序之用。如需詳細資訊,請參閱<決定索引的磁碟空間需求>。

效能考量因素

若叢集的索引建立於含多個現有非叢集索引的堆積上,所有的非叢集索引都必須重建,以便讓它們包含叢集索引鍵值,而非資料列識別碼 (RID)。同樣地,若擁有多個非叢集索引之資料表上的叢集索引被卸除了,非叢集索引將會全部重建,做為 DROP 作業的一部份。在大型資料表中,這可能會花許多時間。

在大型資料表上建立索引的較佳方式是以叢集索引開始,然後建立任何非叢集索引。當您在現有資料表上建立索引時,請考慮將 ONLINE 選項設定為 ON。設定為 ON 時,將不會長期鎖定資料表。這樣一來,基礎資料表上就可以繼續執行查詢或更新動作。如需詳細資訊,請參閱<線上執行索引作業>。

若要在建立資料表時建立 PRIMARY KEY 或 UNIQUE 條件約束

若要在現有的資料表上建立 PRIMARY KEY 或 UNIQUE 條件約束

若要建立索引