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