Istnieje kilka możliwych wyjaśnień, dlaczego widzisz takie zachowanie. Niektóre popularne to
- Podzapytanie lub CTE mogą być wielokrotnie ponownie oceniane.
- Materiałyzacja częściowych wyników w
#temp
tabela może wymusić bardziej optymalną kolejność łączenia dla tej części planu, usuwając niektóre możliwe opcje z równania. - Materiałyzacja częściowych wyników w
#temp
tabela może poprawić resztę planu poprzez skorygowanie słabych szacunków kardynalności.
Najbardziej niezawodną metodą jest po prostu użycie #temp
stół i zmaterializuj go samodzielnie.
W przypadku braku tego w odniesieniu do punktu 1 zobacz Podaj wskazówkę, aby wymusić pośrednią materializację CTE lub tabel pochodnych
. Użycie TOP(large_number) ... ORDER BY
często może zachęcać wynik do buforowania zamiast wielokrotnego ponownego oceniania.
Nawet jeśli to działa, nie ma statystyk na szpuli.
W przypadku punktów 2 i 3 musiałbyś przeanalizować, dlaczego nie otrzymywałeś pożądanego planu. Ewentualnie przepisanie zapytania w celu użycia predykatów sargable lub zaktualizowanie statystyk może uzyskać lepszy plan. Niepowodzenie, że możesz spróbować użyć wskazówek dotyczących zapytania, aby uzyskać pożądany plan.