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

SQL 2005 CTE vs. TEMP-Tabellenleistung bei Verwendung in Joins anderer Tabellen

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.