DBCC DBREINDEX (Transact-SQL)
適用於:SQL Server Azure SQL 受控執行個體
在指定的資料庫中,重建資料表的一或多個索引。
重要
SQL Server 的未來版本將移除此功能。 請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。 請改用 ALTER INDEX。
適用於:SQL Server 2008 (10.0.x) 和更新版本。
語法
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。 如需詳細資訊,請參閱 指定索引的填滿因素。
WITH 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 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