索引 DDL 作業的磁碟空間需求

在建立、重建或卸除索引時,磁碟空間是重要的考慮項目。不足的磁碟空間會降低效能,甚至導致索引作業失敗。此主題提供了一般資訊,可協助您判斷索引資料定義語言 (DDL) 作業所需的磁碟空間數量。

不需要額外磁碟空間的索引作業

下列是不需要額外磁碟空間的索引作業:

  • ALTER INDEX REORGANIZE,但是需要記錄檔空間。

  • DROP INDEX,卸除非叢集索引時。

  • DROP INDEX,離線卸除叢集索引,而不指定 MOVE TO 子句且非叢集索引不存在時。

  • CREATE TABLE (PRIMARY KEY 或 UNIQUE 條件約束)

需要額外磁碟空間的索引作業

所有其他索引 DDL 作業在作業期間都需要使用額外的磁碟空間,並需要永久磁碟空間來儲存新的索引結構。如需索引結構的詳細資訊,請參閱<資料表和索引資料結構架構>。

當建立新的索引結構時,舊 (來源) 和新 (目標) 結構在適當的檔案和檔案群組中需要用到磁碟空間。認可索引建立交易之前,不會取消配置舊結構。

下列索引 DDL 作業會建立新的索引結構,並需要額外的磁碟空間:

  • CREATE INDEX

  • CREATE INDEX WITH DROP_EXISTING

  • ALTER INDEX REBUILD

  • ALTER TABLE ADD CONSTRAINT (PRIMARY KEY 或 UNIQUE)

  • ALTER TABLE DROP CONSTRAINT (PRIMARY KEY 或 UNIQUE) (當條件約束是以叢集索引為基礎時)

  • DROP INDEX MOVE TO (僅適用於叢集索引)。

用於排序的暫存磁碟空間

除了來源和目標結構需要磁碟空間之外,排序時也需要暫存磁碟空間,除非查詢最佳化工具找到不需要排序的執行計畫。

如果需要排序,一次只會對一個新索引進行排序。例如,當您在單一陳述式內重建叢集索引和相關聯的非叢集索引時,會逐一排序索引。因此,排序所需的額外暫存磁碟空間必須和作業中最大的索引一樣大。這幾乎都是叢集索引。

如果 SORT_IN_TEMPDB 選項設為 ON,則最大的索引必須符合 tempdb。雖然此選項會增加建立索引所使用的暫存磁碟空間數量,但只要 tempdb 所在的磁碟集與使用者資料庫不同,就可減少建立索引所需的時間。如需在 tempdb 中排序的詳細資訊,請參閱<建立 tempdb 與索引>。

如果 SORT_IN_TEMPDB 設為 OFF (預設值),則每個索引 (包括資料分割索引) 會在其目的地磁碟空間中排序;而且只需要建立新索引結構的磁碟空間。

如需計算磁碟空間的範例,請參閱<索引磁碟空間範例>。

線上索引作業的暫存磁碟空間

在線上執行索引作業時,需要額外的暫存磁碟空間。

如果在線上建立、重建或卸除叢集索引,會建立暫存非叢集索引,以便將舊書籤對應至新書籤。如果 SORT_IN_TEMPDB 選項設為 ON,則會在 tempdb 中建立此暫存索引。如果 SORT_IN_TEMPDB 設為 OFF,會使用與目標索引相同的檔案群組或資料分割結構描述。暫存對應索引為資料表中的每個資料列都包含一筆記錄,而且其內容結合了舊的和新的書籤資料行,包括 uniqueifiers 和記錄識別碼,並只包括用於這兩個書籤中之所有資料行的單一副本。如需線上索引作業的詳細資訊,請參閱<線上執行索引作業>。

[!附註]

無法對 DROP INDEX 陳述式設定 SORT_IN_TEMPDB 選項。永遠會在與目標索引相同的檔案群組或資料分割結構描述中,建立暫存對應索引。

線上索引作業會使用資料列版本控制,來隔離索引作業和其他交易所進行的修改結果。這樣可避免在已讀取的資料列上要求共用鎖定。線上索引作業期間進行的並行使用者更新和刪除作業,將需要一些空間在 tempdb 中產生版本記錄。如需詳細資訊,請參閱<線上執行索引作業>和<瞭解以資料列版本控制為基礎的隔離等級>。