Моят опит показва, че колкото по-сложни стават вашите заявки, толкова по-малко способен е SQL оптимизаторът да създава ловки планове. Тук имате 16 съединения, някои или повечето са външни съединения, имате поне една подзаявка... добавете достатъчно индекси, мощности, изгледи, външни приложения и кой знае какво още и никой, дори и Microsoft инженери*, могат да измислят рутинни процедури, които равномерно и редовно ще генерират най-оптималните планове.
Това, което описахте, преживях многократно - промените едно просто нещо в объркана заявка и всичко става с един порядък по-бързо (или, скърцане със зъби, по-бавно). Нямам метод за определяне кога сложното е твърде сложно, това е по-скоро чувство, отколкото нещо друго. Моето основно правило е, ако изглежда твърде дълго или твърде сложно, опростете, където можете – като например предварително избраната от вас единична вложена стойност или отделяне на част от заявката, отколкото винаги работи бързо с малък набор от резултати и първо го изпълнява и съхранява резултатите във временна таблица.
( * Моля, обърнете внимание, че това е лек сарксам)