2012-04-19 45 views
6

我有一个查询,索引查找(非聚集)需要更多的时间,占总执行时间的93%。提高非聚集索引查询的性能

查询的执行计划,索引查找的估计行数为1,实际行数为209.这是否是问题?

如何提高非聚集索引seek的性能。一般的答案会有帮助。

执行计划: enter image description here

而且下面是查询,

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 
+0

查询需要多长时间?你为什么认为有问题? – Tomalak 2012-04-19 06:45:06

+0

查询需要大约14秒...需求是应该在3秒内完成 – 2012-04-19 06:50:55

+3

您可以发布执行计划和查询吗? – 2012-04-19 06:51:41

回答

12

当我看到预期的行和实际行之间的这种差异,我会先看看更新的所有参与统计表。

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

这通常需要DBA类型的权限。

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

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

+0

+ 1提供有关如何改进聚集索引查找的非常有用的照明链接。在更新统计数据后,我的查询获得了大量的性能,从1分49秒到3秒。非常感谢GregHNZ! – G21 2013-10-02 19:56:28