建立叢集索引

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Microsoft Fabric 中的 SQL 資料庫

您可以使用 SQL Server Management Studio 或 Transact-SQL 在資料表中建立叢集索引。 除了極少數的例外狀況之外,每個資料表都應該要有叢集索引。 除了可以改善查詢效能以外,叢集索引還能夠視需要加以重建或重新組織,以便控制資料表分散程度。 檢視上也可以建立叢集索引。 (叢集與非叢集索引一文中定義了叢集索引。)

典型實作

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

  • PRIMARY KEY 和 UNIQUE 約束條件**

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

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

    隨條件約束一起建立的索引,會自動採用與條件約束名稱相同的名稱。 如需詳細資訊,請參閱 主索引鍵和外部索引鍵限制 和 唯一限制和檢查限制。

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

    如果已指定非叢集主索引鍵限制,您可以在主索引鍵資料行以外的其他資料行上建立叢集索引。

Limitations

  • 建立叢集索引結構時,個別的檔案和檔案群組中都必須有磁碟空間來保存舊 (來源) 結構和新 (目標) 結構。 舊結構要等到整個交易完成提交後,才會解除配置。 此外,可能還需要額外的暫存磁碟空間以供排序之用。 如需詳細資訊,請參閱 Disk Space Requirements for Index DDL Operations。

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

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

  • 叢集索引的索引鍵不能包含在 配置單位中已有資料的 ROW_OVERFLOW_DATA 資料行。 如果在 varchar 資料行上建立叢集索引,且現有資料位於 IN_ROW_DATA 配置單位中,則後續對該資料行執行、會將資料移到資料列外的插入或更新作業將會失敗。 若要取得可能包含資料列溢位資料之資料表的相關資訊,請使用 sys.dm_db_index_physical_stats (Transact-SQL) 動態管理函數。

Permissions

需要資料表或檢視上的 ALTER 權限。 使用者必須是 系統管理員 固定伺服器角色的成員,或是 db_ddladmin 和 db_owner 固定資料庫角色的成員。

使用 SQL Server Management Studio

使用物件總管建立叢集索引

  1. 在 [物件總管] 中,展開要在其中建立叢集索引的資料表。

  2. 以滑鼠右鍵按一下 [索引] 資料夾,指向 [新增索引],然後選取 [叢集索引…]。

  3. 在 [新增索引] 對話方塊,於 [一般] 頁面上的 [索引名稱] 方塊中輸入新索引的名稱。

  4. 在 索引鍵資料行 底下,選取 新增...。

  5. 在 [從table_name選取數據行] 對話框中,選取要新增至叢集索引之數據表數據行的複選框。

  6. 請選擇 [確定]。

  7. 在 [新增索引] 對話方塊中,選取 [確定]。

使用資料表設計工具建立叢集索引

  1. 在 [物件總管] 中,展開您要在其中建立具有叢集索引之資料表的資料庫。

  2. 以滑鼠右鍵按一下 [資料表] 資料夾,然後選取 [新增資料表…]。

  3. 像平常一樣,建立新資料表。 如需詳細資訊,請參閱建立資料表 (資料庫引擎)。

  4. 以滑鼠右鍵按一下先前建立的新資料表,然後選取 [設計]。

  5. 在 [資料表設計工具] 功能表中,選取 [索引/索引鍵]。

  6. 在 [索引/索引鍵] 對話方塊中,選取 [加入]。

  7. 在 選取的主鍵/唯一鍵或索引 文字方塊中選取新的索引。

  8. 在方格中,選取 [ 建立為叢集],然後從屬性右側的下拉式清單中選擇 [ 是 ]。

  9. 選取 關閉。

  10. 在 [檔案] 功能表中,選取 [儲存]table_name。

使用 Transact-SQL

  1. 在 物件總管 中,連線至資料庫引擎執行個體。

  2. 在標準列上,選取 [新增查詢]。

  3. 複製下列範例並將其貼到查詢視窗中,然後選取 [執行]。

    USE AdventureWorks2022;
    GO
    
    -- Create a new table with three columns.
    CREATE TABLE dbo.TestTable (
        TestCol1 INT NOT NULL,
        TestCol2 NCHAR(10) NULL,
        TestCol3 NVARCHAR(50) NULL
    );
    GO
    
    -- Create a clustered index called IX_TestTable_TestCol1
    -- on the dbo.TestTable table using the TestCol1 column.
    CREATE CLUSTERED INDEX IX_TestTable_TestCol1 ON dbo.TestTable (TestCol1);
    GO
    

如需詳細資訊,請參閱CREATE INDEX。