Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

I CTE utilizzano spazio in tempdb?

Cercherò di non copiare/incollare MSDN

Non importa.

Un CTE è indipendente dall'esecuzione della query:è solo un costrutto di linguaggio. Pensala come una tabella o una sottoquery derivata ordinata.

Ciò significa che, ad eccezione dei CTE ricorsivi (vedi più avanti), tutti I CTE possono essere codificati in linea. Se utilizzi il codice CTE una volta, è per la leggibilità . Se usi il CTE due o più volte, allora è difensivo:non vuoi commettere errori e avere la tabella derivata diversa ad ogni utilizzo.

Laddove un CTE viene utilizzato due o più volte, il codice verrà eseguito due o più volte. Non verrà eseguito una volta e memorizzato nella cache in tempdb.

Riepilogo:può o meno, proprio come se il codice fosse inline.

Nota:un CTE ricorsivo è semplicemente una tabella derivata all'interno di una tabella derivata all'interno di una tabella derivata all'interno di una tabella derivata all'interno di un der... quindi vale lo stesso.

Puoi vederlo in Articolo di Tony Rogerson . L'uso di tempdb avverrebbe comunque se codificato inline. Nota inoltre che l'utilizzo di una tabella temporanea può essere migliore a causa dell'espansione "macro" che ho spiegato sopra

Cordiali saluti:lo stesso vale per le visualizzazioni. Solo macro.