CTE
è solo un alias per la query.
Può (o meno) essere eseguito nuovamente ogni volta che viene utilizzato.
Non esiste un modo pulito per forzare CTE
materializzazione in SQL Server
(come /*+ MATERIALIZE */
di Oracle ), e devi fare brutti scherzi come questo:
CTE
può migliorare le prestazioni se utilizzato in piani che richiedono una sola valutazione (come HASH JOIN
, MERGE JOIN
ecc.).
In questi scenari, la tabella hash verrà creata direttamente dal CTE
, durante l'utilizzo della tabella temporanea sarà necessario valutare il CTE
, trascinando i risultati nella tabella temporanea e leggendo nuovamente la tabella temporanea.