DBCC INDEXDEFRAG (Transact-SQL)
更新: 2006 年 4 月 14 日
重組指定資料表或檢視的索引。
重要事項: |
---|
未來的 Microsoft SQL Server 發行版本將不再提供此功能。請避免在新的開發工作中使用此功能,並計劃修改目前使用此功能的應用程式。 請改用 ALTER INDEX。 |
語法
DBCC INDEXDEFRAG
(
{ database_name | database_id | 0 }
, { table_name | table_id | view_name | view_id }
[ , { index_name | index_id } [ , { partition_number | 0 } ] ]
)
[ WITH NO_INFOMSGS ]
引數
- database_name | database_id | 0
這是要重新組織索引的資料庫。如果指定 0,就會使用目前的資料庫。資料庫名稱必須符合識別碼的規則。
- table_name | table_id | view_name | view_id
這是要重新組織索引的資料表或檢視表。資料表和檢視表名稱必須符合識別碼的規則。
- index_name | index_id
這是要重組之索引的識別碼名稱。若未指定,陳述式會重組指定資料表或檢視表的所有索引。索引名稱必須符合識別碼的規則。
- partition_number | 0
這是要重組之索引的資料分割編號。若未指定,或指定 0,陳述式會重組指定索引中的所有資料分割。
- WITH NO_INFOMSGS
抑制所有嚴重性層級在 0 到 10 的參考用訊息。
結果集
如果在陳述式中指定了索引,DBCC INDEXDEFRAG 會傳回下列結果集 (值可能會不同) (除非指定了 WITH NO_INFOMSGS):
Pages Scanned Pages Moved Pages Removed
------------- ----------- -------------
359 346 8
(1 row(s) affected)
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
備註
DBCC INDEXDEFRAG 會重新組織索引的分葉層級,使頁面的實體順序符合分葉節點由左至右的邏輯順序,以改進索引掃描的效能。
附註: |
---|
當執行 DBCC INDEXDEFRAG 時,會循序重新組織索引。這表示單一索引的作業是利用單一執行緒來執行。不會有任何平行處理原則。另外,相同 DBCC INDEXDEFRAG 陳述式多重索引的作業,每次只會處理一個索引。 |
DBCC INDEXDEFRAG 也會壓縮索引的頁面,它會將建立索引時所指定的填滿因數考慮在內。因這項壓縮而建立的任何空白頁面都會被移除。如需詳細資訊,請參閱<填滿因數>。
如果索引跨越多個檔案,DBCC INDEXDEFRAG 每次會重組一個檔案。在檔案之間,不會進行頁面的移轉。
DBCC INDEXDEFRAG 每五分鐘會報告一次估計的完成百分比。在這個處理序中,隨時可以停止 DBCC INDEXDEFRAG,任何已完成的工作都會保留下來。
DBCC INDEXDEFRAG 不像 DBCC DBREINDEX (一般而言,是建立索引的作業),它是一項線上作業。它不會長期保留鎖定。因此,DBCC INDEXDEFRAG 不會封鎖查詢或更新的執行。由於重組的時間與片段化的層級相關,因此,重組部分片段化索引的速度會比建立新索引快。對於嚴重片段化的索引,重組可能比重建要花更多的時間。
重組一律會有完整的記錄,不論資料庫復原模式設定為何,都是如此。如需詳細資訊,請參閱<ALTER DATABASE (Transact-SQL)>。重組嚴重片段化的索引所產生的記錄,可能會超過建立索引的完整記錄。不過,重組是以一系列的短交易來執行的;因此,如果經常建立記錄備份或復原模式設定是 SIMPLE,就不需要大型記錄。
DBCC INDEXDEFRAG 會就地移動分葉頁。因此,如果有索引與磁碟中的其他索引交錯,針對這個索引來執行 DBCC INDEXDEFRAG,並無法使索引中的所有分葉頁成為連續的。若要改進頁面的叢集,請重建索引。
DBCC INDEXDEFRAG 無法用來重組停用的索引或頁面鎖定設為 OFF 的索引。不支援系統資料表使用 DBCC INDEXDEFRAG。
權限
呼叫者必須擁有資料表,或是系統管理員 (sysadmin) 固定伺服器角色、db_owner 固定資料庫角色,或 db_ddladmin 固定資料庫角色的成員。
範例
下列範例會重組 AdventureWorks
資料庫之 Production.Product
資料表中 PK_Product
_ProductID
索引的所有資料分割。
DBCC INDEXDEFRAG (AdventureWorks, "Production.Product", PK_Product_ProductID)
GO
請參閱
參考
DBCC (Transact-SQL)
sys.dm_db_index_physical_stats
CREATE TABLE (Transact-SQL)
ALTER TABLE (Transact-SQL)
ALTER INDEX (Transact-SQL)
其他資源
說明及資訊
變更歷程記錄
版本 | 歷程記錄 |
---|---|
2006 年 4 月 14 日 |
|