Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Warum ist dieser CTE so viel langsamer als die Verwendung temporärer Tabellen?

Wie Sie im Abfrageplan sehen können, behält sich die Engine bei CTEs das Recht vor, sie grundsätzlich als Suche anzuwenden, selbst wenn Sie einen Join wünschen.

Wenn es nicht sicher genug ist, kann es das Ganze im Voraus unabhängig ausführen und im Wesentlichen eine temporäre Tabelle erstellen ... lassen Sie es uns einfach einmal für jede Zeile ausführen.

Dies ist perfekt für die Rekursionsabfragen, die sie wie von Zauberhand ausführen können.

Aber Sie sehen - in den verschachtelten verschachtelten Schleifen - wo es schrecklich schief gehen kann.
Sie finden die Antwort bereits selbst, indem Sie die echte temporäre Tabelle ausprobieren.