建立叢集索引
您可以使用 SQL Server Management Studio 或 Transact-SQL,在 SQL Server 2012 中的資料表上建立叢集索引。 除了極少數的例外狀況之外,每個資料表都應該要有叢集索引。 除了可以改善查詢效能以外,叢集索引還能夠視需要加以重建或重新組織,以便控制資料表分散程度。 檢視上也可以建立叢集索引。 (叢集索引是在<叢集與非叢集索引說明>主題中進行定義)。
本主題內容
開始之前:
一般實作
限制事項
安全性
使用下列方法在資料表上建立叢集索引:
SQL Server Management Studio
Transact-SQL
開始之前
一般實作
實作叢集索引的方法如下:
PRIMARY KEY 與 UNIQUE 條件約束
當您建立 PRIMARY KEY 條件約束時,如果資料表上的叢集索引尚未存在,而且您未並指定唯一的非叢集索引,則會在資料行上自動建立唯一的叢集索引。 主索引鍵資料行不允許 NULL 值。
當您建立 UNIQUE 條件約束時,依預設會建立唯一的非叢集索引,以強制 UNIQUE 條件約束。 若資料表上還沒有叢集索引,您可以指定唯一叢集索引。
隨條件約束一起建立的索引,會自動採用與條件約束名稱相同的名稱。 如需詳細資訊,請參閱<主要與外部索引鍵條件約束>和<唯一條件約束與檢查條件約束>。
獨立於條件限制之外的索引
如果已指定非叢集的主索引鍵條件約束,您可以在主索引鍵資料行以外的資料行上建立叢集索引。
限制事項
建立叢集索引結構時,個別的檔案和檔案群組中都必須有磁碟空間來保存舊 (來源) 結構和新 (目標) 結構。 除非認可整個交易,否則舊結構的配置不會取消。 此外,可能還需要額外的暫存磁碟空間以供排序之用。 如需詳細資訊,請參閱<索引 DDL 作業的磁碟空間需求>。
若叢集的索引建立於含多個現有非叢集索引的堆積上,所有的非叢集索引都必須重建,以便讓它們包含叢集索引鍵值,而非資料列識別碼 (RID)。 同樣地,若擁有多個非叢集索引之資料表上的叢集索引被卸除了,非叢集索引將會全部重建,做為 DROP 作業的一部份。 在大型資料表中,這可能會花許多時間。
在大型資料表上建立索引的較佳方式是以叢集索引開始,然後建立任何非叢集索引。 當您在現有資料表上建立索引時,請考慮將 ONLINE 選項設定為 ON。 設定為 ON 時,將不會長期鎖定資料表。 這樣一來,基礎資料表上就可以繼續執行查詢或更新動作。 如需詳細資訊,請參閱<線上執行索引作業>。
叢集索引的索引鍵所包含的 varchar 資料行不能在 ROW_OVERFLOW_DATA 配置單位中有現有的資料。 如果在 varchar 資料行上建立叢集索引,且現有的資料在 IN_ROW_DATA 配置單位中,則後續在可能發送資料非資料列的資料行上進行的插入或更新動作會失敗。 若要取得可能包含資料列溢位資料之資料表的相關資訊,請使用 sys.dm_db_index_physical_stats (Transact-SQL) 動態管理函數。
安全性
權限
需要資料表或檢視的 ALTER 權限。 使用者必須是系統管理員 (sysadmin) 固定伺服器角色的成員,或是 db_ddladmin 和 db_owner 固定資料庫角色的成員。
[Top]
使用 SQL Server Management Studio
若要使用物件總管建立叢集索引
在 [物件總管] 中,展開要在其中建立叢集索引的資料表。
以滑鼠右鍵按一下 [索引] 資料夾,指向 [新增索引],然後選取 [叢集索引]。
在 [新增索引] 對話方塊,於 [一般] 頁面上的 [索引名稱] 方塊中輸入新索引的名稱。
按一下 [索引鍵資料行] 底下的 [加入]。
在 [從 table_name 選取資料行] 對話方塊中,選取要加入至叢集索引之資料表資料行的核取方塊。
按一下 [確定]。
在 [新增索引] 對話方塊中,按一下 [確定]。
若要使用資料表設計工具建立叢集索引
在 [物件總管] 中,展開要在其中建立包含叢集索引之資料表的資料庫。
以滑鼠右鍵按一下 [資料表] 資料夾,然後按一下 [新增資料表]。
像平常一樣,建立新資料表。 如需詳細資訊,請參閱<建立資料表 (Database Engine)>。
以滑鼠右鍵按一下上面建立的新資料表,然後按一下 [設計]。
在 [資料表設計工具] 功能表中,按一下 [索引/索引鍵]。
在 [索引/索引鍵] 對話方塊中,按一下 [加入]。
從 [選取的主/唯一索引鍵或索引] 文字方塊中選取新索引。
在方格中,選取 [建立成 CLUSTERED],然後從屬性右邊的下拉式清單中選擇 [是]。
按一下 [關閉]。
按一下 [檔案] 功能表上的 [儲存 table_name]。
[Top]
使用 Transact-SQL
若要建立叢集索引
在 [物件總管] 中,連接到 Database Engine 的執行個體。
在標準列上,按一下 [新增查詢]。
將下列範例複製並貼到查詢視窗中,然後按一下 [執行]。
USE AdventureWorks2012; 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 (Transact-SQL)>。
[Top]