1

次のように、データベース内のインデックスの断片化を表示するための非常に単純な標準クエリがあります。

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% がフラグメンテーションであることがわかります。これらの他のフラグメンテーション番号はどこから来ているのでしょうか? これらの結果を説明できる人はいますか? どうもありがとう。

4

1 に答える 1

2

2つのビューでobject_idの結合を実行していますが、これは一意の値ではありません。object_idの値が複数回出現するということは、複数の行結合を意味します。結合条件にindex_idを含める必要があります。編集:ええ、マーティン・スミスが言ったこと!

于 2012-06-08T20:14:41.157 に答える