Der er et par mulige forklaringer på, hvorfor du ser denne adfærd. Nogle almindelige er
- Underforespørgslen eller CTE bliver muligvis revurderet gentagne gange.
- Materialisering af delvise resultater til en
#temp
tabel kan fremtvinge en mere optimal sammenføjningsrækkefølge for den del af planen ved at fjerne nogle mulige muligheder fra ligningen. - Materialisering af delvise resultater til en
#temp
tabel kan forbedre resten af planen ved at korrigere dårlige kardinalitetsestimater.
Den mest pålidelige metode er simpelthen at bruge en #temp
bord og materialiser det selv.
I modsat fald vedrørende punkt 1, se Giv et tip til at fremtvinge mellemliggende materialisering af CTE'er eller afledte tabeller
. Brugen af TOP(large_number) ... ORDER BY
kan ofte tilskynde resultatet til at blive spoolet i stedet for gentagne gange at revurdere.
Selvom det virker, er der dog ingen statistik på spolen.
For punkt 2 og 3 skal du analysere, hvorfor du ikke fik den ønskede plan. Eventuelt omskrivning af forespørgslen til at bruge sargerbare prædikater, eller opdatering af statistik kan få en bedre plan. I modsat fald kan du prøve at bruge forespørgselstip for at få den ønskede plan.