SQL ist eine deklarative Sprache, keine prozedurale Sprache. Das heißt, Sie erstellen eine SQL-Anweisung, um die gewünschten Ergebnisse zu beschreiben. Sie sagen der SQL-Engine nicht, wie sie die Arbeit erledigen soll.
In der Regel empfiehlt es sich, die SQL-Engine und den SQL-Optimierer den besten Abfrageplan finden zu lassen. Die Entwicklung einer SQL-Engine erfordert viele jahrelange Anstrengungen. Lassen Sie die Ingenieure also tun, was sie können.
Natürlich gibt es Situationen, in denen der Abfrageplan nicht optimal ist. Anschließend möchten Sie Abfragehinweise verwenden, die Abfrage umstrukturieren, Statistiken aktualisieren, temporäre Tabellen verwenden, Indizes hinzufügen usw., um eine bessere Leistung zu erzielen.
Wie für Ihre Frage. Die Leistung von CTEs und Unterabfragen sollte theoretisch gleich sein, da beide dem Abfrageoptimierer dieselben Informationen bereitstellen. Ein Unterschied besteht darin, dass ein mehr als einmal verwendeter CTE leicht identifiziert und einmal berechnet werden kann. Die Ergebnisse könnten dann mehrmals gespeichert und gelesen werden. Leider scheint SQL Server diese grundlegende Optimierungsmethode nicht zu nutzen (Sie können diese allgemeine Eliminierung von Unterabfragen nennen).
Temporäre Tabellen sind eine andere Sache, da Sie mehr Anleitungen zur Ausführung der Abfrage geben. Ein wesentlicher Unterschied besteht darin, dass das Optimierungsprogramm Statistiken aus der temporären Tabelle verwenden kann, um seinen Abfrageplan zu erstellen. Dies kann zu Leistungssteigerungen führen. Wenn Sie einen komplizierten CTE (Unterabfrage) haben, der mehrmals verwendet wird, führt das Speichern in einer temporären Tabelle häufig zu einer Leistungssteigerung. Die Abfrage wird nur einmal ausgeführt.
Die Antwort auf Ihre Frage lautet, dass Sie herumspielen müssen, um die erwartete Leistung zu erzielen, insbesondere bei komplexen Abfragen, die regelmäßig ausgeführt werden. In einer idealen Welt würde der Abfrageoptimierer den perfekten Ausführungspfad finden. Obwohl dies häufig der Fall ist, können Sie möglicherweise einen Weg finden, um eine bessere Leistung zu erzielen.