設定索引選項

設計、建立或修改索引時,有數個索引選項需納入考慮。您可以第一次建立索引或重建索引時,指定這些選項。您可以隨時使用 ALTER INDEX 陳述式的 SET 子句,選擇性地設定某些索引選項。

索引選項

描述

儲存在中繼資料中的設定

相關主題

PAD_INDEX

設定在建立索引期間中間層級分頁中可用空間的百分比。

填滿因數

FILLFACTOR

設定在建立索引期間每個索引分頁之分葉層級中可用空間的百分比。

填滿因數

SORT_IN_TEMPDB

判定在索引建立期間產生之中間排序結果會儲存於何處。

如果是 ON,排序結果會儲存於 tempdb 中。如果是 OFF,則排序結果會儲存於儲存結果索引的檔案群組或資料分割配置中。

附註附註
如果不需要排序作業,或是可在記憶體中執行排序,將忽略 SORT_IN_TEMPDB。

tempdb 與索引建立

IGNORE_DUP_KEY

指定當插入作業嘗試將重複的索引鍵值插入唯一索引時所產生的錯誤回應。IGNORE_DUP_KEY 選項只適用於在建立或重建索引之後所發生的插入作業。預設值是 OFF。

CREATE INDEX

STATISTICS_NORECOMPUTE

指定是否應該自動重新計算過期的索引統計資料。

索引統計資料

DROP_EXISTING

指出應該卸除現有索引並加以重建。

重新組織和重建索引

ONLINE

判定索引作業期間是否允許使用者並行存取基礎資料表或叢集索引資料,以及任何相關聯的非叢集索引。

附註附註
只有 SQL Server Enterprise、Developer 和 Evaluation 版本上才可使用線上索引作業。

執行線上索引作業

ALLOW_ROW_LOCKS

判定是否要在存取索引資料時使用資料列鎖定。

CREATE INDEX

自訂索引的鎖定

ALLOW_PAGE_LOCKS

判定是否要在存取索引資料時使用分頁鎖定。

CREATE INDEX

自訂索引的鎖定

MAXDOP

設定查詢處理器最多可以使用多少個處理器來執行單一索引陳述式。根據目前的系統工作負載而定,所用的處理器可能會更少。

附註附註
只有 SQL Server Enterprise、Developer 和 Evaluation 版本才可使用平行索引作業。

修改索引

DATA_COMPRESSION

針對指定的資料表、資料分割編號或資料分割範圍指定資料壓縮選項。選項為 NONE、ROW 和 PAGE。

建立壓縮資料表及索引

設定索引上的選項

設定選項而不需重建

您可以在 ALTER INDEX 陳述式中使用 SET 子句,設定下列索引選項,而不需重建索引:

  • ALLOW_PAGE_LOCKS

  • ALLOW_ROW_LOCKS

  • IGNORE_DUP_KEY

  • STATISTICS_NORECOMPUTE

這些選項會立即套用到索引。只在建立或重建索引時,才能指定其他索引選項,如 FILLFACTOR 及 ONLINE。

檢視索引選項設定

不是所有的索引選項值都會儲存在中繼資料中。您可以利用適當的目錄檢視,檢視那些儲存於中繼資料中的值。若要檢查現有索引上的目前選項設定,請使用 sys.indexes 目錄檢視。若要檢查 STATISTICS_NORECOMPUTE 的目前值,請使用 sys.stats 目錄檢視。如需詳細資訊,請參閱<檢視索引資訊>。

範例

下列範例會對 Production.Product 資料表上的 AK_Product_ProductNumber 索引,設定 ALLOW_ROW_LOCKS 及 IGNORE_DUP_KEY 選項。

USE AdventureWorks;
GO
--Verify the current values for these options.
SELECT allow_row_locks, ignore_dup_key
FROM sys.indexes 
WHERE name = N'AK_Product_ProductNumber';
GO
--Set the ALLOW_ROW_LOCKS option OFF and the IGNORE_DUP_KEY option ON.
ALTER INDEX AK_Product_ProductNumber       
ON Production.Product       
SET (ALLOW_ROW_LOCKS = OFF, IGNORE_DUP_KEY = ON);
GO
--Verify the new values for these options.
SELECT allow_row_locks, ignore_dup_key
FROM sys.indexes 
WHERE name = N'AK_Product_ProductNumber';
GO