Альтернатива SELECT DISTINCT - PullRequest
2 голосов
/ 20 июня 2011

Я не слишком знаком с запросами 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 Different, чтобы ускорить запрос и вернуть те же результаты? Любая помощь очень ценится. спасибо.

Ответы [ 2 ]

7 голосов
/ 20 июня 2011

Вам нужен только DISTINCT из-за ПРИСОЕДИНЕНИЯ.

Так что не используйте JOIN: используйте 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
5 голосов
/ 20 июня 2011

Тебе точно не нужен второй 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?

...