19

インデックスシーク(クラスター化されていない)が合計実行時間の約93%以上の時間を費やしているクエリがあります。

クエリの実行プランでは、インデックスシークの推定行数は1で、実際の行数は209です。これが問題かどうか。

非クラスター化インデックスシークのパフォーマンスを向上させる方法。一般的な答えが役立ちます。

実行計画: ここに画像の説明を入力してください

そして、以下はクエリです、

SELECT TOP 11 DVPR1.IncidentID, DVPR2.IncidentID, Rel.ID, PER1.[LastName], PER1.[FirstName]
FROM 
  DV_PHPersonalRecord DVPR1 
INNER JOIN Relationship Rel 
  ON  Rel.source_Id = DVPR1.RowId 
  AND Rel.typeCode = 'RPLC'
INNER JOIN DV_PHPersonalRecord DVPR2 
  ON  DVPR2.RowId = Rel.target_Id
INNER JOIN [T_Attribute] (nolock) 
  ON  [T_Attribute].[ActRelationship_ID] = Rel.[ID] 
  AND [T_Attribute].[name] = 'MergeFlag' 
  AND ( [T_Attribute].[valueString_Code] = 'pending')
INNER JOIN [Person] PER1 (nolock) 
  ON  DVPR1.[PersonDR]=PER1.[RowID]
INNER JOIN [Person] PER2 (nolock) 
  ON  DVPR2.[PersonDR]=PER2.[RowID]
WHERE 
    DVPR1.TypeDR = 718990 
  AND
    (PER1.[Code_ID] IS NULL OR ( PER1.[Code_ID] = '6516' 
                             AND PER1.[OptionsCode_ID] = '6522')
    )
  AND 
    ( PER2.[Code_ID] IS NULL OR ( PER2.[Code_ID] = '6516' 
                              AND PER2.[OptionsCode_ID] = '6522')
    )
ORDER BY PER1.[LastName] ASC,
        PER1.[FirstName] ASC
4

1 に答える 1

21

予想される行と実際の行の間にこのような不一致が見られる場合は、最初に、関連するすべてのテーブルの統計を更新することを検討します。

クエリオプティマイザはこれを自動的に行うことになっていますが...時にはそれが利益をもたらすことがあります。

これには通常、DBAタイプの権限が必要です。

更新統計に関するMicrosoftのページを確認してください。

http://msdn.microsoft.com/en-us/library/ms187348.aspx

于 2012-04-19T07:23:53.017 に答える