Wydaje się, że planista zapytań podjął decyzję w dosłownym zapytaniu, która jest oparta na informacjach, które już posiada. Miałby statystyki, które może skutecznie przeszukiwać w oparciu o rozproszenie danych podanych w konkretnym literale.
Sparametryzowane zapytanie wybrało zapytanie, które jego zdaniem jest najbardziej sprawiedliwe dla wszystkich danych w tabeli, co, jak zauważysz, zawiera wiele zagnieżdżonych pętli (wydajność =zła).
Być może spróbujesz uruchomić narzędzia do optymalizacji bazy danych w swojej bazie danych, aby sprawdzić, czy niektóre indeksy mogą ci tu pomóc?
Szczególnie w zapytaniu wypróbuj to:
declare @p0 int
set @p0 = 1000
select *
from foo
join bar on bar.x = foo.x
join baz on baz.y = foo.y
where foo.x = @p0
OPTION ( OPTIMIZE FOR (@p0 = 1000))
Ale byłbym ostrożny, jeśli chodzi o robienie tego bez pewności, że dane zawarte w tym zapytaniu nie ulegną zmianie i że Twoje zapytanie w tym planie ZAWSZE będzie bardziej wydajne.