當索引所在頁面的基於主關鍵字的邏輯順序,和資料檔案中的物理順序不匹配時,片段就產生了。所有的葉級頁包含了指向前一個和後一個頁的指標。這樣就形成一個雙鏈表。理想情況下,資料檔案中頁的物理順序會和邏輯順序匹配。整個磁碟的工作效能在物理順序匹配邏輯順序時將顯著提升。對某些特定的查詢而言,這將帶來極佳的效能。當物理排序和邏輯排序不匹配時,磁碟的工作效能會變得低效,這是因為磁頭必須向前和向後移動來尋找索引,而不是只象某個單一方向來搜尋。片段會影響I/O效能,不過對於位於SQL Server資料緩衝內的資料頁而言,片段並不會帶來任何影響。
在索引磁碟重組前,請確保系統資源的一些問題,比如物理磁碟片段,不合理的基礎結構等因素會給效能帶來負面影響,參看KB935089:使用 Defrag 管理器可以 such as Exchange Server 或 SQL Server 資料庫伺服器的卷進行磁碟重組。
DBCC SHOWCONTIG是顯示指定的表的資料和索引的片段資訊。當運行該命令時,要特別注意邏輯片段(Logical Fragmentation)和頁密度(Page Density)兩個指標。
Page Scanned-掃描頁數:如果你知道行的近似尺寸和表或索引裡的行數,那麼你可以估計出索引裡的頁數。看看掃描頁數,如果明顯比你估計的頁數要高,說明存在內部片段。
Extents Scanned-掃描擴充盤區數:用掃描頁數除以8,四捨五入到下一個最高值。該值應該和DBCC SHOWCONTIG返回的掃描擴充盤區數一致。如果DBCC SHOWCONTIG返回的數高,說明存在外部片段。片段的嚴重程度依賴於剛才顯示的值比估計值高多少。
Extent Switches-擴充盤區開關數:該數應該等於掃描擴充盤區數減1。高了則說明有外部片段。
Avg. Pages per Extent-每個擴充盤區上的平均頁數:該數是掃描頁數除以掃描擴充盤區數,一般是8。小於8說明有外部片段。
Scan Density [Best Count:Actual Count]-掃描密度[最佳值:實際值]:DBCC SHOWCONTIG返回最有用的一個百分比。這是擴充盤區的最佳值和實際值的比率。該百分比應該儘可能靠近100%。低了則說明有外部片段。
Logical Scan Fragmentation-邏輯掃描片段:無序頁的百分比。該百分比應該在0%到10%之間,高了則說明有外部片段。
Extent Scan Fragmentation-擴充盤區掃描片段:無序擴充盤區在掃描索引葉級頁中所佔的百分比。該百分比應該是0%,高了則說明有外部片段。
Avg. Bytes Free per Page-每頁上的平均可用位元組數:所掃描的頁上的平均可用位元組數。越高說明有內部片段,不過在你用這個數字決定是否有內部片段之前,應該考慮fill factor(填滿因數)。
Avg. Page Density (full)-平均頁密度(完整):每頁上的平均可用位元組數的百分比的相反數。低的百分比說明有內部片段。
參考:Microsoft SQL Server 2000 索引磁碟重組最佳實務
如何將索引片段數量降至最低