DBCC DBREINDEX (Transact-SQL)

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

ms181671.note(zh-tw,SQL.90).gif重要事項:
未來的 Microsoft SQL Server 發行版本將不再提供此功能。請避免在新的開發工作中使用此功能,並計劃修改目前使用此功能的應用程式。 請改用 ALTER INDEX

主題連結圖示Transact-SQL 語法慣例

語法

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

引數

  • table_name
    這是要重建指定的一或多個索引的資料表名稱。資料表名稱必須遵照識別碼的規則。database.
  • 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 的參考用訊息。

結果集

不論是否指定了 NO_INFOMSGS 以外的任何選項 (必須指定資料表名稱),DBCC DBREINDEX 都會傳回:

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

備註

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

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

不支援系統資料表使用 DBCC DBREINDEX。

權限

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

範例

A. 重建索引

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

USE AdventureWorks; 
GO
DBCC DBREINDEX ("HumanResources.Employee", PK_Employee_EmployeeID,80);
GO

B. 重建所有索引

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

USE AdventureWorks; 
GO
DBCC DBREINDEX ("HumanResources.Employee", " ", 70);
GO

請參閱

參考

ALTER TABLE (Transact-SQL)
CREATE TABLE (Transact-SQL)
DBCC (Transact-SQL)
sys.indexes (Transact-SQL)
sys.dm_db_index_physical_stats
ALTER INDEX (Transact-SQL)

其他資源

資料表與索引架構

說明及資訊

取得 SQL Server 2005 協助