整理指定的表或視圖的聚集索引和輔助索引碎片。
DBCC INDEXDEFRAG
( { database_name | database_id | 0 }
, { table_name | table_id | 'view_name' | view_id }
, { index_name | index_id }
) [ WITH NO_INFOMSGS ]
database_name | database_id | 0
是對(duì)其索引進(jìn)行碎片整理的數(shù)據(jù)庫。數(shù)據(jù)庫名稱必須符合標(biāo)識(shí)符的規(guī)則。有關(guān)更多信息,請(qǐng)參見使用標(biāo)識(shí)符。如果指定 0,則使用當(dāng)前數(shù)據(jù)庫。
table_name | table_id | 'view_name' | view_id
是對(duì)其索引進(jìn)行碎片整理的表或視圖。表名和視圖名稱必須符合標(biāo)識(shí)符規(guī)則。
index_name | index_id
是要進(jìn)行碎片整理的索引。索引名必須符合標(biāo)識(shí)符的規(guī)則。
WITH NO_INFOMSGS
禁止顯示所有信息性消息(具有從 0 到 10 的嚴(yán)重級(jí)別)。
DBCC INDEXDEFRAG 可以對(duì)表或視圖上的索引和非聚集索引進(jìn)行碎片整理。DBCC INDEXDEFRAG 對(duì)索引的葉級(jí)進(jìn)行碎片整理,以便頁的物理順序與葉節(jié)點(diǎn)從左到右的邏輯順序相匹配,從而提高索引掃描性能。
DBCC INDEXDEFRAG 還壓縮索引頁,并在壓縮時(shí)考慮創(chuàng)建索引時(shí)指定的 FILLFACTOR。此壓縮所產(chǎn)生的任何空頁都將刪除。有關(guān) FILLFACTOR 的更多信息,請(qǐng)參見 CREATE INDEX。
如果索引跨越多個(gè)文件,則 DBCC INDEXDEFRAG 一次對(duì)一個(gè)文件進(jìn)行碎片整理。頁不在文件之間遷移。
DBCC INDEXDEFRAG 每隔 5 分鐘向用戶報(bào)告預(yù)計(jì)完成的百分比??稍谶M(jìn)程中的任一點(diǎn)結(jié)束 DBCC INDEXDEFRAG,任何已完成的工作都將保留。
與 DBCC DBREINDEX(一般的索引生成操作)不同,DBCC INDEXDEFRAG 是聯(lián)機(jī)操作。它不長期控制鎖,因此不會(huì)防礙運(yùn)行查詢或更新。若索引的碎片相對(duì)較少,則整理該索引的速度比生成一個(gè)新索引要快,這是因?yàn)樗槠硭璧臅r(shí)間與碎片的數(shù)量有關(guān)。對(duì)碎片太多的索引進(jìn)行整理可能要比重建花更多的時(shí)間。另外,始終對(duì)碎片整理進(jìn)行完整的日志記錄,與數(shù)據(jù)庫恢復(fù)模型設(shè)置無關(guān)(請(qǐng)參見 ALTER DATABASE)。對(duì)碎片太多的索引進(jìn)行整理所生成的日志記錄可能比完全記錄的索引創(chuàng)建還要多。然而,若需經(jīng)常進(jìn)行日志備份或如果恢復(fù)模型設(shè)置是 SIMPLE,碎片整理將作為一系列短事務(wù)執(zhí)行,因此不需要大量的日志。
另外,如果兩個(gè)索引在磁盤上交叉存取事務(wù),DBCC INDEXDEFRAG 將沒有作用,原因是 INDEXDEFRAG 打亂了已有的頁。若要改善頁的聚集,請(qǐng)重建索引。
不支持在系統(tǒng)表上使用 DBCC INDEXDEFRAG。
如果沒有指定 WITH NO_INFOMSGS,DBCC INDEXDEFRAG 將返回以下結(jié)果集(值可能會(huì)有變化):
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 權(quán)限默認(rèn)授予 sysadmin 固定服務(wù)器角色或 db_owner 和 db_ddladmin 固定數(shù)據(jù)庫角色的成員以及表的所有者且不可轉(zhuǎn)讓。
DBCC INDEXDEFRAG (Northwind, Orders, CustomersOrders)
GO