6

欠落しているインデックスを見つけるためのクエリの作成をいじっています。SQL Server DMV Starter Pack eBook で Red-Gate の人々によって作成されたベース クエリを取得し、少し変更しています。sys.dm_db_missing_index_group_stats解釈の仕方がわからないコラムがいくつかあります。彼らです:

avg_total_user_cost
avg_user_impact

ドキュメントによると、 avg_total_user_cost はRepresents the average total user cost every time when the user query was generated として定義されていることがわかりました。そして、 avg_user_impact値をパーセンテージで表します。インデックスを作成した場合に得られる改善の量を示します。

私のクエリが追加する必要があると言うインデックスは、2.22 の平均ユーザー コストと 99.82 のユーザーへの影響を示しています。これらの数字は実際には何を意味するのでしょうか? これは、インデックスを追加することで、関連するクエリの速度を 99.82% 向上させることができるということですか。2.22 が何を意味するのかわかりません。

ありがとう。

4

2 に答える 2

9

これらについての私の解釈は次のとおりです。

  • avg_total_user_cost欠落しているインデックス グループを作成することで利益が得られる可能性があるすべてのクエリの現在の平均です。「コスト」は、オプティマイザによって計算される単位のない値です。参照: SQL SERVER – 実行計画 – 推定 I/O コスト – 推定 CPU コスト – 単位なし

  • avg_user_impact欠落しているインデックス グループが作成された場合のすべてのクエリのコストの平均減少率を表すパーセンテージです。パーセンテージが高いほど、新しいインデックスのメリットが大きくなります。

于 2010-09-15T14:06:02.290 に答える
5

@Joeの答えは正しいようです。おそらく役立つ情報をいくつか追加しています:

この計算を使用して全体的な影響値を与える記事がここにあります。

avg_total_user_cost * avg_user_impact * (migs.user_seeks + migs.user_scans)) 

彼らが提案するクエリは次のとおりです。

SELECT CONVERT (varchar, getdate(), 126) AS runtime, 
    mig.index_group_handle, mid.index_handle, 
    CONVERT (decimal (28,1), migs.avg_total_user_cost * migs.avg_user_impact * 
            (migs.user_seeks + migs.user_scans)) AS improvement_measure, 
    'CREATE INDEX missing_index_' + CONVERT (varchar, mig.index_group_handle) + '_' + 
              CONVERT (varchar, mid.index_handle) + ' ON ' + mid.statement + ' 
              (' + ISNULL (mid.equality_columns,'') 
              + CASE WHEN mid.equality_columns IS NOT NULL 
                          AND mid.inequality_columns IS NOT NULL 
                     THEN ',' ELSE '' END + ISNULL (mid.inequality_columns, '')
              + ')' 
              + ISNULL (' INCLUDE (' + mid.included_columns + ')', '') AS create_index_statement, 
    migs.*, 
    mid.database_id, 
    mid.[object_id]
FROM sys.dm_db_missing_index_groups AS mig
INNER JOIN sys.dm_db_missing_index_group_stats AS migs 
    ON migs.group_handle = mig.index_group_handle
INNER JOIN sys.dm_db_missing_index_details AS mid 
    ON mig.index_handle = mid.index_handle
ORDER BY migs.avg_total_user_cost * migs.avg_user_impact * (migs.user_seeks + migs.user_scans) DESC

結果improvement_measureは単位がありません。つまり、相対的な意味でのみ有用ですが、これはさまざまな値を組み合わせて、dm_db_missing_index_group_stats意思決定に役立つものにするのに役立ちます。

于 2014-09-26T12:58:30.147 に答える