次のように、データベース内のインデックスの断片化を表示するための非常に単純な標準クエリがあります。
SELECT DB_NAME(DB_ID()) AS DatabaseName,
OBJECT_NAME(ddips.[object_id]) AS TableName,
ind.[name] AS IndexName,
ddips.index_type_desc AS IndexType,
ddips.avg_fragmentation_in_percent AS FragmentationPercentage,
ddips.fragment_count AS FragmentCount,
ddips.avg_fragment_size_in_pages AS AvgFragmentSizeInPages,
ddips.page_count AS [PageCount]
FROM sys.dm_db_index_physical_stats (DB_ID(), null, null, null, null) AS ddips
INNER JOIN sys.indexes ind on ind.[object_id] = ddips.[object_id]
ORDER BY ddips.avg_fragmentation_in_percent DESC
しかし、実行すると、まったく同じデータ (同じテーブル名、インデックス名、およびインデックスタイプ) がさまざまな断片化率で複数回返されることがわかります。以下に例を示します。
これらの結果がわかりません。SSMS でテーブルを開き、インデックスを開き、フラグメンテーション ページに移動すると、最小の 1.71% がフラグメンテーションであることがわかります。これらの他のフラグメンテーション番号はどこから来ているのでしょうか? これらの結果を説明できる人はいますか? どうもありがとう。