那加入[docSVsys]为[docSVsysReturn]是杀害查询
三个条件联接是杀死它 - 它变成一个循环连接
它需要2分钟
如果我拿出我尝试了合并和散列连接,但他们(或者[docSVsysReturn]。[sParID] = [coreCTE]。[sParID]和[docSVsysReturn]。[sParID] = [docSVsysReturn]。[sID])它在1秒钟内运行s 不允许
涉及的列被索引
[sID]是PK和[sParID]是必需的,FK是[sID]
有关如何修复性能的任何想法?缓慢加入多个条件
; WITH coreCTE AS (
select [docSVsysAuth].[sID], [docSVsysAuth].[sParID]
from [docSVsys] as [docSVsysAuth] with (nolock)
join [docSVtext] as [Table] with (nolock)
on [Table].[sID] = [docSVsysAuth].[sID]
and [docSVsysAuth].[visibility] in (0)
and [Table].[fieldID] = '108'
where [table].[value] = 'Andy Wipper<[email protected]>'
)
, [cteFinal] AS (
select distinct [docSVsysReturn].[sID], [docSVsysReturn].[sParID]
from [coreCTE]
join [docSVsys] as [docSVsysReturn] with (nolock)
on ([docSVsysReturn].[sID] = [coreCTE].[sID]
or
([docSVsysReturn].[sParID] = [coreCTE].[sParID] and [docSVsysReturn].[sParID] = [docSVsysReturn].[sID])
)
and [docSVsysReturn].[visibility] in (0)
)
select [cteFinal].[sID], [cteFinal].[sParID]
from [cteFinal]
order by [cteFinal].[sID], cteFinal.[sParID]
这有助于有点
on ([docSVsysReturn].[sID] = [coreCTE].[sID]
or
([docSVsysReturn].[sID] <> [coreCTE].[sID] and [docSVsysReturn].[sParID] = [coreCTE].[sParID] and [docSVsysReturn].[sParID] = [docSVsysReturn].[sID])
)
这个工作,但我建立查询了一个程序,并有许多其他条件和UNION只是很多工作 – Paparazzi
'或'在加入是很难优化。可能通过向所涉及的列添加各种索引来优化计划。否则,你可能会坚持走'联盟'的路。 – Magnus
每列都编入索引。查询计划中只有索引寻找。看到我的修复。 – Paparazzi