共用方式為


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

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

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

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

  • ALTER INDEX REORGANIZE,但需要日誌空間。

  • 請在卸除非叢集索引時使用 DROP INDEX。

  • 若在沒有指定 MOVE TO 子句,且不存在非叢集索引的情況下脫機刪除叢集索引,則需使用 DROP INDEX。

  • 建立資料表(主要鍵或唯一性約束條件)

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

所有其他索引 DDL 作業都需要額外的暫存磁碟空間,才能在作業期間使用,以及永久磁碟空間來儲存新的索引結構或結構。

當建立新的索引結構時,舊 (來源) 和新 (目標) 結構在適當的檔案和檔案群組中需要用到磁碟空間。 舊結構在索引創建交易提交之前不會被釋放。

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

  • 建立索引

  • 建立索引並刪除已存在的索引

  • ALTER 索引重建

  • 更改資料表以添加約束條件(主鍵或唯一鍵)

  • 當限制基於叢集索引時,使用 ALTER TABLE DROP CONSTRAINT 刪除約束條件(PRIMARY KEY或UNIQUE鍵)。

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

排序的暫存磁碟空間

除了來源和目標結構所需的磁碟空間之外,除非查詢優化器找到不需要排序的執行計劃,否則需要暫存磁碟空間來進行排序。

如果需要進行排序,會逐一按新的索引進行。 例如,當您在單一語句中重建叢集索引和相關聯的非叢集索引時,索引會依序排序。 因此,排序所需的額外暫存磁碟空間只需和作業中最大索引的大小一樣大。 這幾乎一律是叢集索引。

如果 [SORT_IN_TEMPDB] 選項設定為 ON,則最大的索引必須符合 tempdb。 雖然此選項會增加用來建立索引的暫存磁碟空間量,但是當 tempdb 位於與用戶資料庫不同的一組磁碟上時,可能會縮短建立索引所需的時間。

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

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

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

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

如果建立、重建或卸除叢集索引,則會建立暫時的非叢集索引,以將舊書籤對應至新的書籤。 如果 [SORT_IN_TEMPDB] 選項設定為 ON,則會在 tempdb 中建立此暫存索引。 如果SORT_IN_TEMPDB設定為 OFF,則會使用與目標索引相同的檔案群組或分割區配置。 暫存對應索引包含數據表中每個數據行的一筆記錄,而且其內容是舊書籤和新書籤列的聯集,包括唯一標識符和記錄識別碼,並且只包含兩個書籤中使用的任何數據列的單一複本。 如需在線索引作業的詳細資訊,請參閱 在線執行索引作業

備註

無法為DROP INDEX語句設定SORT_IN_TEMPDB選項。 暫存對應索引一律建立在與目標索引相同的檔案群組或分割區配置中。

在線索引作業會使用數據列版本設定來隔離索引作業與其他交易所做的修改效果。 這可避免要求已讀取之數據列的共享鎖定。 在線索引作業期間的並行使用者更新和刪除作業需要 tempdb中版本記錄的空間。 如需詳細資訊,請參閱 在線執行索引作業

索引磁碟空間範例

索引作業的交易記錄磁碟空間

估計資料表的大小

估計叢集索引的大小

估計非叢集索引的大小

估計堆積的大小

建立索引 (Transact-SQL)

ALTER INDEX (Transact-SQL)

DROP INDEX (Transact-SQL)

指定索引的填滿因數

重新組織及重建索引