19

我有一个查询,其中索引查找(非聚集)需要更多时间,大约占总执行时间的 93%。

查询的执行计划,index seek的估计行数是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 回答