[MSSQL] Które zapytanie szybsze

0

Cześć, mam 2 zapytania. Jedno z distinctem, drugie - z podzapytaniem i group by.
Na samym początku mi wyszło, że to z distinctem zabiera sekundę, a planie wykonania są jakieś prawe złączenia, generalnie podejrzewam, że chodzi o porównywanie rekordów - szukanie duplikatów.

Potem zapuściłem drugie zapytanie. Oczywiście plan egzekucyjny zmalał, ale gdy wywołuję pierwsze zapytanie(to z DISTINCT) dokładnie dostaję rezultat tego drugiego. Tzn. podejrzewam, że SQL sobie coś tam przechowuje i nie wykonuje drugi raz zapytania, którego ma wyniki. Ale próbowałem zmieniać dane w warunkach i wykonywać inne selecty - nic mi to nie zmieniło.

Więc pytanie do speców, które zapytanie wykona się szybciej:

select distinct employeeID, [dbo].get_date(date) as date
FROM V_Events
WHERE (@zm is null or @zm = employeeID) AND
          (@zm2 is null or @zm2<=[dbo].get_date(date)) AND
          (@zm3 is null or @zm3>=[dbo].get_date(date))
order by employeeID, date

czy

select a.employeeID, a.date
from 
(
      select employeeID, [dbo].get_date(date) as date
      FROM V_Events		
      where (@zm is null or @zm = employeeID) AND
	  (@zm2 is null or @zm2<=[dbo].get_date(date)) AND
	  (@zm3 is null or @zm3>=[dbo].get_date(date))  
) as a
group by a.employeeID, a.date
order by a.employeeID, a.date

V_Events to oczywiście widok, który ma w sobie kilka joinów i zagnieżdżonego case'a(ale to chyba w pytaniu akurat nie jest ważne).
get_date to moja funkcja, która wiadomo co robi :)

OK, więc która wersja będzie szybsza?

Aha, w drugim zapytaniu zagnieżdżony select jest dlatego, że bez niego dostawałem duplikaty.

0

Drugie zapytanie i tak jest przekształcane do pierwszego, więc są tak samo szybkie przynajmniej teoretycznie. Zauważ, że w obu zapytaniach serwer najpierw robi table scana, a później distinct sorta, więc obojętnie jak to napiszesz czas wykonania będzie podobny.

1 użytkowników online, w tym zalogowanych: 0, gości: 1