Het is mijn ervaring dat, hoe complexer uw query's worden, hoe minder goed de SQL-optimizer in staat is om behendige plannen te maken. Hier heb je 16 joins, sommige of de meeste zijn outer joins, je hebt ten minste één subquery ... gooi in voldoende indexen, kardinaliteiten, views, outer is van toepassing, en wie weet wat nog meer en niemand, zelfs Microsoft niet ingenieurs*, kunnen routines bedenken die uniform en regelmatig de meest optimale plannen zullen genereren.
Wat je hebt beschreven, heb ik talloze keren meegemaakt - verander één simpel ding in een rommelige vraag en alles is een orde van grootte sneller (of, tandenknarsen, langzamer). Ik heb geen methode om te bepalen wanneer complex te complex is, het is meer een gevoel dan iets anders. Mijn algemene vuistregel is, als het er te lang of te ingewikkeld uitziet, vereenvoudig dan waar u kunt, zoals uw vooraf geselecteerde enkele geneste waarde, of het uitbreken van een deel van de zoekopdracht dan altijd ren snel met een kleine resultatenset, en voer deze eerst uit en sla de resultaten op in een tijdelijke tabel.
( * Houd er rekening mee dat dit milde sarcsam is)