Z mojego doświadczenia wynika, że im bardziej złożone są Twoje zapytania, tym mniej sprawny jest optymalizator SQL w tworzeniu zręcznych planów. Tutaj masz 16 złączeń, niektóre lub większość to złączenia zewnętrzne, masz co najmniej jedno podzapytanie... wrzuć wystarczającą liczbę indeksów, liczności, widoków, zastosowania zewnętrzne i kto wie co jeszcze i nikt, nawet Microsoft inżynierowie*, mogą opracować procedury, które będą równomiernie i regularnie generować najbardziej optymalne plany.
To, co opisałeś, doświadczyłem wiele razy - zmień jedną prostą rzecz w niechlujnym zapytaniu, a wszystko będzie o rząd wielkości szybciej (lub zgrzyta zębami, wolniej). Nie mam metody na określenie, kiedy złożoność jest zbyt złożona, to bardziej uczucie niż cokolwiek innego. Moja ogólna praktyczna zasada brzmi:jeśli wygląda na zbyt długą lub zbyt skomplikowaną, uprość ją tam, gdzie możesz – na przykład wstępnie wybraną pojedynczą wartość zagnieżdżoną lub wydzielenie części zapytania, co zawsze działaj szybko z małym zestawem wyników, najpierw uruchamiając go i przechowując wyniki w tabeli tymczasowej.
( * Należy pamiętać, że jest to łagodny sarcsam)