Sql 提高非聚集索引Seek的性能
我有一个查询,其中索引查找(非聚集)花费的时间占总执行时间的93%左右 查询的执行计划中,索引搜索的估计行数为1,实际行数为209。这是否问题所在 如何提高非聚集索引搜索的性能。一般性的回答会有帮助 执行计划: 以下是查询: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
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!