適用於:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Microsoft Fabric 中的 SQL 資料庫
當您建立、重建或卸除索引時,磁碟空間是一個重要的考量。 不足的磁碟空間會降低效能,甚至導致索引作業失敗。 本文提供一般資訊,可協助您判斷索引資料定義語言 (DDL) 作業所需的磁碟空間量。
不需要額外磁碟空間的索引作業
下列是不需要額外磁碟空間的索引作業:
ALTER INDEX REORGANIZE;不過,需要日誌空間。DROP INDEX當您卸除非叢集索引時。DROP INDEX當您在未指定MOVE TO子句的情況下離線卸除叢集索引時,且非叢集索引皆不存在。CREATE TABLE(PRIMARY KEY或UNIQUE限制)
需要額外磁碟空間的索引作業
所有其他索引 DDL 作業在作業期間都需要使用額外的磁碟空間,並需要永久磁碟空間來儲存新的索引結構。
當建立新的索引結構時,舊 (來源) 和新 (目標) 結構在適當的檔案和檔案群組中需要用到磁碟空間。 在索引建立交易提交之前,不會解除配置原有結構。
下列索引 DDL 作業會建立新的索引結構,並需要額外的磁碟空間:
CREATE INDEXCREATE INDEX WITH DROP_EXISTINGALTER INDEX REBUILD-
ALTER TABLE ADD CONSTRAINT(PRIMARY KEY或UNIQUE) -
ALTER TABLE DROP CONSTRAINT( 或PRIMARY KEYUNIQUE) 當條件限制以叢集索引為基礎時 -
DROP INDEX MOVE TO(僅適用於叢集索引。
用於排序的臨時磁碟空間
除了來源和目標結構所需的磁碟空間之外,排序也需要暫存磁碟空間,除非查詢最佳化工具找到不需要排序的執行計劃。
如果需要排序,一次只會對一個新索引進行排序。 例如,當您在單一陳述式內重建叢集索引和相關聯的非叢集索引時,會逐一排序索引。 因此,排序所需的額外暫存磁碟空間必須和作業中最大的索引一樣大。 這幾乎都是叢集索引。
如果選項 SORT_IN_TEMPDB 設為 ON,則最大的索引必須符合 tempdb。 雖然此選項會增加用來建立索引的暫存磁碟空間量,但當位於與使用者資料庫不同的磁碟集上時 tempdb ,它可能會減少建立索引所需的時間。
如果 SORT_IN_TEMPDB 設為 OFF(預設值),則每一個索引(包括分割索引)都會在其目的地磁碟空間中排序,並且只需要新索引結構的磁碟空間。
如需計算磁碟空間的範例,請參閱 索引磁碟空間範例。
線上索引作業的暫存磁碟空間
在線上執行索引作業時,需要額外的暫存磁碟空間。
如果在線上建立、重建或卸除叢集索引,會建立暫存非叢集索引,以便將舊書籤對應至新書籤。 如果選項 SORT_IN_TEMPDB 設為 ON,則會在 中 tempdb建立此暫存索引。 如果設定為 SORT_IN_TEMPDB,則OFF會使用與目標索引相同的檔案群組或分割區配置。 暫存對應索引為資料表中的每個資料列都包含一筆記錄,而且其內容結合了舊的和新的書籤資料行,包括唯一識別碼和記錄識別碼,並只包括用於這兩個書籤中之所有資料行的單一副本。 如需線上索引作業的詳細資訊,請參閱 線上執行索引作業。
注意
無法為SORT_IN_TEMPDB陳述式設定DROP INDEX選項。 永遠會在與目標索引相同的檔案群組或資料分割結構描述中,建立暫存對應索引。
線上索引作業會使用資料列版本設定來隔離索引作業與其他交易所進行的修改影響。 這樣可避免在已讀取的資料列上要求共用鎖定。 並行使用者更新和刪除作業在線上索引作業期間需要tempdb中的版本記錄空間。 如需詳細資訊,請參閱 線上執行索引作業 。