SELECT DISTINCT的替代方案

Kev*_*n H 2 sql t-sql sql-server distinct

我对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
Run Code Online (Sandbox Code Playgroud)

有没有人知道如何在不使用select distinct的情况下修改此查询以便在返回相同结果时加快查询速度?任何帮助是极大的赞赏.谢谢.

gbn*_*gbn 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
Run Code Online (Sandbox Code Playgroud)


a1e*_*x07 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
Run Code Online (Sandbox Code Playgroud)

我看不出NLFROM /JOIN.你错过了它或它应该是CL吗?