CTE
ist nur ein Alias für die Abfrage.
Es kann (oder auch nicht) jedes Mal, wenn es verwendet wird, erneut ausgeführt werden.
Es gibt keine saubere Möglichkeit, CTE
zu erzwingen Materialisierung in SQL Server
(wie Oracles /*+ MATERIALIZE */
), und du musst schmutzige Tricks wie diese machen:
CTE
kann die Leistung verbessern, wenn es in Plänen verwendet wird, die nur eine Auswertung erfordern (wie HASH JOIN
). , MERGE JOIN
usw.).
In diesen Szenarien wird die Hash-Tabelle direkt aus dem CTE
erstellt , während die Verwendung der temporären Tabelle eine Auswertung des CTE
erfordert , die Ergebnisse in die temporäre Tabelle ziehen und die temporäre Tabelle erneut lesen.