在性能调优查询方面需要帮助。执行计划显示SResourceHierarchy和grouprelationship上的扫描计数太高 数百万左右的桌子。 我创建了关于sresource和矩阵目标的覆盖索引,主要减少了时间。 但我想知道是否有任何其他方式编写查询来提高整体性能,即使是1%。
query ::
select * from
(SELECT
sr.rsrcnum, sr.fllnm, isnull(mgr.fllnm,'') as mgrnm, d.actid, d.goaldesctxt ,
d.cmpltstscd, d.strtdt, d.enddt, dta,
(select TOP 1 itmtxt from tm.Code where catcd = '12103' and itmcd = d.cmpltstscd and lngcd = 0 and delflg = 0) as Status
from
TM.matrixgoal d
inner join
TM.sresource sr on d.rsrcid=sr.rsrcid and sr.delflg=0 and sr.stscd<>1 and sr.rsrcid > 7
left join
TM.sresource mgr on mgr.rsrcid=sr.mgr1id and mgr.delflg=0 and mgr.stscd<>1
inner join
TM.resume1 r1 on r1.rsrcid=sr.rsrcid
where
d.stscd in (3,4) and d.typcd=5009 and d.activeflg=1
AND (sr.rsrcid IN (SELECT node.empid FROM tm.SResourceHierarchy node JOIN tm.SResourceHierarchy parent ON node.lft > parent.lft AND node.lft < parent.rgt AND node.mgrnum = 1 AND parent.mgrnum = 1 )
or sr.RsrcID IN (select r.rsrcid from tm.resume1 r join tm.grouprelationship g on
(g.hierarchylvl0 = r.hierarchylvl0 or (g.hierarchylvl0 is null and r.hierarchylvl0 is null))
and (g.hierarchylvl1=r.HierarchyLvl1 or (g.hierarchylvl1 is null and r.HierarchyLvl1 is null))
and (g.hierarchylvl2=r.HierarchyLvl2 or (g.hierarchylvl2 is null and r.HierarchyLvl2 is null))
and (g.hierarchylvl3=r.HierarchyLvl3 or (g.hierarchylvl3 is null and r.HierarchyLvl3 is null))
and g.delflg=0 and g.AllowDenyCD='a'))
) temp
ORDER BY
fllnm, goaldesctxt
答案 0 :(得分:1)
应该在查询中使用子查询。所以它应该是表现明智的穷人。 对每个主查询行运行简单的子查询。这花了很多时间。 如果提高性能,请避免子查询。您使用连接而不是子查询。
答案 1 :(得分:0)
对我而言,它看起来像是一个大屁股单行声明,我知道的唯一一个选择是尝试为您正在使用的各种表添加索引。这应该加快它更快地找到数据的能力
答案 2 :(得分:0)
尝试使用EXISTS
代替IN
。