Det finns några möjliga förklaringar till varför du ser detta beteende. Några vanliga är
- Underfrågan eller CTE kan utvärderas upprepade gånger.
- Materialiserar partiella resultat till en
#temp
tabell kan tvinga fram en mer optimal sammanfogningsordning för den delen av planen genom att ta bort några möjliga alternativ från ekvationen. - Materialiserar partiella resultat till en
#temp
tabellen kan förbättra resten av planen genom att korrigera dåliga uppskattningar av kardinalitet.
Den mest tillförlitliga metoden är helt enkelt att använda en #temp
bord och materialisera det själv.
Om det inte gäller punkt 1, se Ge en ledtråd för att tvinga fram mellanliggande materialisering av CTE eller härledda tabeller
. Användningen av TOP(large_number) ... ORDER BY
kan ofta uppmuntra resultatet att spoolas i stället för att upprepade gånger omvärderas.
Även om det fungerar så finns det ingen statistik på spolen.
För punkterna 2 och 3 skulle du behöva analysera varför du inte fick den önskade planen. Om du eventuellt skriver om frågan för att använda sargbara predikat eller att uppdatera statistik kan det bli en bättre plan. Om det misslyckas kan du försöka använda frågetips för att få önskad plan.