我对SQL查询不太熟悉,但是在使用Select Distinct运行查询时发现性能显着下降。我正在运行SQL Server 2008 R2。以下是我的询问:
select distinct CL.ClientID, NL.Name
from CL CL
inner join PR PR on CL.ClientID = PR.ClientID
where PR.WBT1 in (Select distinct WBT1
from TabFields
where custInclude = 'Y' and WBT2 = '')
and PR.WBT2 = ''
order by NL.Name
有没有人知道如何在不使用select distinct的情况下修改此查询以便在返回相同结果时加快查询速度?任何帮助是极大的赞赏。感谢。
答案 0 :(得分:7)
由于JOIN,你只需要DISTINCT。
所以不要使用JOIN:使用EXISTS并将所有未实际SELECT的表推送到EXISTS子句
select CL.ClientID, CL.Name
from CL CL
WHERE EXISTS (SELECT *
FROM
PR PR
JOIN
TabFields TF ON PR.WBT1 = TF.WBT1
WHERE
PR.WBT2 = '' AND
TF.custInclude = 'Y' and TF.WBT2 = '' AND
CL.ClientID = PR.ClientID
)
order by CL.Name
答案 1 :(得分:5)
你绝对不需要第二个SELECT DISTINCT
。您可以将其替换为EXIST
:
select distinct CL.ClientID, NL.Name from CL CL
inner join PR PR on CL.ClientID = PR.ClientID
WHERE EXISTS
(SELECT 1 from TabFields where WBT1=PR.WBS1 AND custInclude = 'Y' and WBT2 = '')
and PR.WBT2 = '' order by NL.Name
我在NL
中看不到FROM /JOIN
。你错过了它或它应该是CL
吗?