DBCC DBREINDEX (Transact-SQL)

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

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

重要

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

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

Transact-SQL 語法慣例

Syntax

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

注意

若要檢視 SQL Server 2014 與更早版本的 Transact-SQL 語法,請參閱舊版文件

引數

table_name

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

index_name

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

fillfactor

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

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

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

WITH NO_INFOMSGS

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

備註

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

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

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

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

限制

系統不支援在以下物件上使用 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 來重建 AdventureWorks2022 叢集索引。

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

B. 重建所有索引

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

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

另請參閱