Share via


index_option (Transact-SQL)

指定利用 ALTER TABLE 所建立之條件約束定義中的索引所能套用的一組選項。

主題連結圖示Transact-SQL 語法慣例

語法

{ 
    PAD_INDEX = { ON | OFF }
  | FILLFACTOR = fillfactor
  | IGNORE_DUP_KEY = { ON | OFF }
  | STATISTICS_NORECOMPUTE = { ON | OFF }
  | ALLOW_ROW_LOCKS = { ON | OFF }
  | ALLOW_PAGE_LOCKS = { ON | OFF }
  | SORT_IN_TEMPDB = { ON | OFF } 
  | ONLINE = { ON | OFF }
  | MAXDOP = max_degree_of_parallelism
  | DATA_COMPRESSION = { NONE |ROW | PAGE}
      [ ON PARTITIONS ( { <partition_number_expression> | <range> } 
            [ , ...n ] ) ]
}

<range> ::= 
<partition_number_expression> TO <partition_number_expression>

<single_partition_rebuild__option> ::=
{
    SORT_IN_TEMPDB = { ON | OFF }
  | MAXDOP = max_degree_of_parallelism
  | DATA_COMPRESSION = {NONE | ROW | PAGE } }
}

引數

  • PAD_INDEX = { ON | OFF }
    指定索引填補。預設值是 OFF。

    • ON
      FILLFACTOR 指定的可用空間百分比會套用到索引的中繼層級頁面上。

    • OFF 或未指定 fillfactor
      在中繼頁面上提供索引鍵組之後,中繼層級頁面容量的填滿程度會保留至少足以容納一個資料列的空間,且該資料列的大小上限是索引所能擁有的大小上限。

  • FILLFACTOR **=**fillfactor
    指定一個百分比來指出在建立或改變索引期間,Database Engine 應該使各索引頁面之分葉層級填滿的程度。指定的值必須是 1 至 100 之間的整數值。預設值是 0。

    [!附註]

    從各方面來說,填滿因數值 0 和 100 都相同。

  • IGNORE_DUP_KEY = { ON | OFF }
    指定當插入作業嘗試將重複的索引鍵值插入唯一索引時所產生的錯誤回應。IGNORE_DUP_KEY 選項只適用於在建立或重建索引之後所發生的插入作業。執行 CREATE INDEXALTER INDEXUPDATE 時,這個選項沒有任何作用。預設值是 OFF。

    • ON
      當重複的索引鍵值插入唯一索引時,就會出現警告訊息。只有違反唯一性條件約束的資料列才會失敗。

    • OFF
      當重複的索引鍵值插入唯一索引時,就會出現錯誤訊息。整個 INSERT 作業將會回復。

    若為針對檢視表所建立的索引、非唯一索引、XML 索引、空間索引和篩選索引,IGNORE_DUP_KEY 不得設為 ON。

    若要檢視 IGNORE_DUP_KEY,請使用 sys.indexes

    在與舊版本相容的語法中,WITH IGNORE_DUP_KEY 相當於 WITH IGNORE_DUP_KEY = ON。

  • STATISTICS_NORECOMPUTE = { ON | OFF }
    指定是否要重新計算統計資料。預設值是 OFF。

    • ON
      不會自動重新計算過期的統計資料。

    • OFF
      啟用自動統計資料更新。

  • ALLOW_ROW_LOCKS = { ON | OFF }
    指定是否允許資料列鎖定。預設值是 ON。

    • ON
      當存取索引時,允許資料列鎖定。Database Engine 會決定使用資料列鎖定的時機。

    • OFF
      不使用資料列鎖定。

  • ALLOW_PAGE_LOCKS = { ON | OFF }
    指定是否允許頁面鎖定。預設值是 ON。

    • ON
      當存取索引時,允許頁面鎖定。Database Engine 會決定使用頁面鎖定的時機。

    • OFF
      不使用頁面鎖定。

  • SORT_IN_TEMPDB = { ON | OFF }
    指定是否將排序結果儲存在 tempdb 中。預設值是 OFF。

    • ON
      用來建立索引的中繼排序結果會儲存在 tempdb 中。如果 tempdb 位於使用者資料庫以外的另一組磁碟上,這種儲存方式可以減少建立索引所需的時間。不過,這會增加建立索引時所使用的磁碟空間量。

    • OFF
      中繼排序結果會儲存在與用來儲存索引相同的資料庫中。

  • ONLINE = { ON | OFF }
    指定在索引作業期間,查詢和資料修改是否能夠使用基礎資料表和相關聯的索引。預設值是 OFF。

    [!附註]

    唯一的非叢集索引不能在線上建立。這包括因 UNIQUE 或 PRIMARY KEY 條件約束而建立的索引。

    • ON
      索引作業持續期間不會保留長期資料表鎖定。在索引作業的主要階段期間,來源資料表上只保留意圖共用 (IS) 鎖定。這可使基礎資料表和索引的查詢或更新能夠進行。在作業開始時,共用 (S) 鎖定會在來源物件上保留一段很短的時間。在作業結束時,如果正在建立非叢集索引,則有一段短時間會在來源上取得 S (共用) 鎖定;或者,當以線上方式建立或卸除叢集索引時,以及正在重建叢集索引或非叢集索引時,則會取得 SCH-M (結構描述修改) 鎖定。建立本機暫存資料表的索引時,ONLINE 不能設為 ON。

    • OFF
      在索引作業期間,套用資料表鎖定。建立、重建或卸除叢集索引的離線索引作業,或重建或卸除非叢集索引的離線索引作業,會取得資料表的結構描述修改 (Sch-M) 鎖定。這可防止所有使用者在作業持續期間存取基礎資料表。建立非叢集索引的離線索引作業會取得資料表的共用 (S) 鎖定。這可防止對基礎資料表進行更新,但可允許讀取作業,如 SELECT 陳述式。

    如需詳細資訊,請參閱<線上索引作業如何運作>。如需有關鎖定的詳細資訊,請參閱<鎖定模式>。

    [!附註]

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

  • MAXDOP **=**max_degree_of_parallelism
    在索引作業期間,覆寫 max degree of parallelism 組態選項。如需詳細資訊,請參閱<max degree of parallelism 選項>。請利用 MAXDOP 來限制執行平行計畫所用的處理器數目。最大值是 64 個處理器。

    max_degree_of_parallelism 可以是:

    • 1
      抑制平行計畫的產生。

    • >1
      將平行索引作業所用的最大處理器數目限制為指定的數目。

    • 0 (預設值)
      根據目前的系統工作負載來使用實際數目的處理器或比實際數目更少的處理器。

    如需詳細資訊,請參閱<設定平行索引作業>。

    [!附註]

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

  • DATA_COMPRESSION
    針對指定的資料表、資料分割編號或資料分割範圍指定資料壓縮選項。選項如下:

    • NONE
      不壓縮資料表或指定的資料分割。

    • ROW
      使用資料列壓縮來壓縮資料表或指定的資料分割。

    • PAGE
      使用頁面壓縮來壓縮資料表或指定的資料分割。

    如需有關壓縮的詳細資訊,請參閱<建立壓縮資料表及索引>。

  • ON PARTITIONS ( { <partition_number_expression> | <range> } [ ,...n ] )
    指定套用 DATA_COMPRESSION 設定的資料分割。如果未分割此資料表,ON PARTITIONS 引數將會產生錯誤。如果未提供 ON PARTITIONS 子句,DATA_COMPRESSION 選項將會套用到資料分割資料表的所有資料分割。

    可以使用以下方式來指定 <partition_number_expression>:

    • 提供資料分割的編號,例如:ON PARTITIONS (2)。

    • 為數個個別資料分割提供以逗號分隔的資料分割編號,例如:ON PARTITIONS (1, 5)。

    • 同時提供範圍和個別資料分割,例如:ON PARTITIONS (2, 4, 6 TO 8)。

    <range> 可以指定為以 TO 一字分隔的資料分割編號,例如:ON PARTITIONS (6 TO 8)。

    若要為不同的資料分割設定不同類型的資料壓縮,請指定 DATA_COMPRESSION 選項一次以上,例如:

    REBUILD WITH 
    (
    DATA_COMPRESSION = NONE ON PARTITIONS (1), 
    DATA_COMPRESSION = ROW ON PARTITIONS (2, 4, 6 TO 8), 
    DATA_COMPRESSION = PAGE ON PARTITIONS (3, 5)
    )
    
  • <single_partition_rebuild__option>
    在大多數情況下,重建索引會重建資料分割索引的所有資料分割。下列選項套用到單一資料分割時,不會重建所有資料分割。

    • SORT_IN_TEMPDB

    • MAXDOP

    • DATA_COMPRESSION

備註

如需索引選項的完整描述,請參閱<CREATE INDEX (Transact-SQL)>。