Sql 提高非聚集索引Seek的性能

Sql 提高非聚集索引Seek的性能,sql,sql-server,Sql,Sql Server,我有一个查询,其中索引查找(非聚集)花费的时间占总执行时间的93%左右 查询的执行计划中,索引搜索的估计行数为1,实际行数为209。这是否问题所在 如何提高非聚集索引搜索的性能。一般性的回答会有帮助 执行计划: 以下是查询: SELECT TOP 11 DVPR1.IncidentID, DVPR2.IncidentID, Rel.ID, PER1.[LastName], PER1.[FirstName] FROM DV_PHPersonalRecord DVPR1 INNER JOI

我有一个查询,其中索引查找(非聚集)花费的时间占总执行时间的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

当我看到预期行和实际行之间存在这样的差异时,我将首先查看更新所有相关表的统计信息

查询优化器应该自动执行此操作,但是。。。有时它会带来好处

这通常需要DBA类型的权限

查看Microsoft有关更新统计信息的页面


查询需要多长时间?为什么你认为有问题?查询大约需要14秒。。。要求在3秒钟内完成扫描,然后发布执行计划和查询?这不是很有用。请添加SQL和整个执行计划。从中我们可以看到seek执行了10424次,但没有人知道为什么,因此没有人可以告诉您如何处理它。查询和执行计划的XML版本将非常有用。+1提供了一个非常有用的、有启发性的链接,介绍如何改进聚集索引搜索。我的查询在更新统计数据后立即运行,从1分钟49秒到3秒,获得了很多性能。非常感谢GregHNZ!