加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 提高非聚集索引查找的性能

发布时间:2020-12-12 06:29:00 所属栏目:MsSql教程 来源:网络整理
导读:我有一个查询,其中索引搜索(非聚集)占用总执行时间的93%的更多时间. 查询的执行计划,索引查找的估计行数是1,实际行数是209.这是否是问题? 如何提高非聚簇索引的性能.一般性答案将有所帮助. 执行计划: 以下是查询, SELECT TOP 11 DVPR1.IncidentID,DVPR2.In
我有一个查询,其中索引搜索(非聚集)占用总执行时间的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页面.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读