CTE
är bara ett alias för frågan.
Den kan (eller kanske inte) köras om varje gång den används.
Det finns inget rent sätt att tvinga fram CTE
materialisering i SQL Server
(som Oracles /*+ MATERIALIZE */
), och du måste göra smutsiga trick som detta:
CTE
kan förbättra prestandan om den används i planer som bara kräver en utvärdering (som HASH JOIN
, MERGE JOIN
etc.).
I dessa scenarier kommer hashtabellen att byggas direkt från CTE
, medan du använder temp-tabellen kommer att kräva utvärdering av CTE
, drar resultaten in i temptabellen och läser temptabellen igen.