如果碎片程度小于30%,建議使用重組而不是重建。因為重組不會鎖住資料頁或者資料表,并且降低CPU的資源。
總得來說,重組會清空目前的B-TREE,特别是索引的葉子節點,重組資料頁和消除碎片。和重建不同,重組不會添加任何新資料頁。
為了了解是否有必要重組索引,需要首先檢視碎片程度,如果在10%以下,那一般沒必要做什麼維護,如果在10%~30%,就建議進行重組。
1、 以下各種重組索引的方法:
--不指定參數重組索引:
ALTER INDEX [idx_refno] ON [ordDemo]
REORGANIZE
GO
--重組表中所有索引:
ALTER INDEX ALL ON [ordDemo]
--使用DBCC INDEXDEFRAG重建表上所有索引:
DBCC INDEXDEFRAG('AdventureWorks','ordDemo')
--使用DBCC INDEXDEFRAG重組表上一個索引:
DBCC INDEXDEFRAG('AdventureWorks','ordDemo','idx_refno')
2、 DBCC INDEXDEFRAG指令同樣是後續不建議繼續使用的指令。
索引重組,也可以稱為碎片重組,對單獨索引的操作将使用單獨的線程。不可以并行操作。是以同一時刻隻有一個索引被操作。
重組并不産生新頁,但是會壓縮頁,如果頁面已經為空,将會移除這個頁,是以填充因子選項是不需要的。同時,因為它不會鎖住對象,是以總是聯機處理。
重組同樣需要sysadmin、db_onwer、db_ddladmin角色。