DBCC DBREINDEX (Transact-SQL)

適用於:SQL ServerAzure SQL 受控執行個體

在指定的資料庫中,重建資料表的一或多個索引。

重要

SQL Server 的未來版本將移除此功能。 請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。 請改用 ALTER INDEX。

適用於:SQL Server 2008 (10.0.x) 和更新版本。

Transact-SQL 語法慣例

語法

DBCC DBREINDEX
(
    table_name
    [ , index_name [ , fillfactor ] ]
)
    [ WITH NO_INFOMSGS ]

引數

table_name

這是包含要重建之指定索引的資料表名稱。 資料表名稱必須遵照識別碼的規則。

index_name

要重建的索引名稱。 索引名稱必須符合識別碼的規則。 如果指定 index_name,則必須指定 table_name。 如果未指定 index_name 或其為 ' ',就會重建資料表的所有索引。

fillfactor

這是建立或重建索引時,每個索引頁面上用來儲存資料的空間百分比。 當建立索引時,fillfactor 會取代填滿因數,而成為索引的新預設值,或成為因重建叢集索引而重建的任何其他非叢集索引的新預設值。

當 fillfactor 是 0 時,DBCC DBREINDEX 會使用最後指定給索引的填滿因數值。 這個值儲存在 sys.indexes 目錄檢視中。

如果指定 fillfactor,則必須指定 table_name 和 index_name。 如果未指定 fillfactor,就會使用預設填滿因數 100。 如需詳細資訊,請參閱 指定索引的填滿因素。

與NO_INFOMSGS

抑制所有嚴重性層級在 0 到 10 的參考用訊息。

備註

DBCC DBREINDEX 重建資料表的索引,或定義給資料表的所有索引。 在允許動態重建索引時,您不需要卸除再重新建立 PRIMARY KEY 或 UNIQUE 條件約束,就可以重建強制執行 PRIMARY KEY 或 UNIQUE 條件約束的索引。 這表示您不需要知道資料表或其條件約束的結構,就能重建索引。 在資料大量複製到資料表時,就可能發生這個情況。

DBCC DBREINDEX 可以在單一陳述式中,重建資料表的所有索引。 這比編寫多個 DROP INDEX 和 CREATE INDEX 陳述式簡單。 由於工作是用單一陳述式來執行的,因此,DBCC DBREINDEX 會自動成為不可部分完成;個別的 DROP INDEX 和 CREATE INDEX 陳述式則必須包括在交易內,才能成為不可部分完成。 另外,DBCC DBREINDEX 提供的最佳化程度超出個別的 DROP INDEX 和 CREATE INDEX 陳述式。

DBCC INDEXDEFRAG 是離線作業,不同於 ALTER INDEX 或使用 REORGANIZE 選項的 DBCC DBREINDEX。 如果重建非叢集索引,在作業期間,會保留相關資料表的共用鎖定。 這可以防止修改資料表。 如果重建叢集索引,就會保留獨佔資料表鎖定。 這會防止任何資料表存取作業,因而可以使資料表有效離線。 請利用設定了 ALTER INDEX REBUILD 選項的 ONLINE 陳述式,在線上重建索引,或在重建索引的作業期間,控制平行處理原則的程度。

如需有關選取方法來重建或重新組織索引的詳細資訊,請參閱重新組織與重建索引。

限制

系統不支援在以下物件上使用 DBCC DBREINDEX:

  • 系統資料表
  • 空間索引
  • 記憶體最佳化資料行存放區索引

結果集

除非指定了 NO_INFOMSGS (必須指定資料表名稱),否則 DBCC DBREINDEX 一定會傳回:

DBCC execution completed. If DBCC printed error messages, contact your system administrator.

權限

呼叫端必須擁有資料表,或是系統管理員 sysadmin 固定伺服器角色、db_owner 固定資料庫角色,或 db_ddladmin 固定資料庫角色的成員。

範例

A. 重建索引

下列範例會在 Employee_EmployeeID 資料庫的 80 資料表上,利用填滿因數 Employee 來重建 AdventureWorks2025 叢集索引。

USE AdventureWorks2022;
GO
DBCC DBREINDEX ('HumanResources.Employee', PK_Employee_BusinessEntityID, 80);
GO

B. 重建所有索引

下列範例利用填滿因數值 Employee 來重建 AdventureWorks2025 資料庫的 70 資料表的所有索引。

USE AdventureWorks2022;
GO
DBCC DBREINDEX ('HumanResources.Employee', ' ', 70);
GO