Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 选择DISTINCT的备选方案_Sql Server_Tsql_Distinct_Sql - Fatal编程技术网

Sql server 选择DISTINCT的备选方案

Sql server 选择DISTINCT的备选方案,sql-server,tsql,distinct,sql,Sql Server,Tsql,Distinct,Sql,我不太熟悉SQL查询,但注意到在使用Select Distinct运行查询时,性能会显著下降。我正在运行SQLServer2008R2。以下是我的疑问: 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

我不太熟悉SQL查询,但注意到在使用Select Distinct运行查询时,性能会显著下降。我正在运行SQLServer2008R2。以下是我的疑问:

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的情况下修改此查询,以便在返回相同结果的同时加快查询速度?非常感谢您的帮助。谢谢。

您肯定不需要第二个
选择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

而且我在
FROM/JOIN
中没有看到
NL
。您是否错过了它,或者它应该是
CL

您只需要因为连接而使用DISTINCT

所以不要使用连接:使用EXISTS并将所有未实际选择的表推送到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

当你说“性能显著下降”时,你能提供一些数字吗?(您是如何衡量的?您是否在查看查询计划、查询执行统计数据、所用时间?)您的查询之间有什么区别?只是第一个select子句中的“distinct”关键字?或者也在“in”子查询中?当与
in
一起使用时,您不需要使用
distinct
,谢谢!我感谢你的帮助。