11

Le CTE utilizzano spazi in tempdb o utilizzano esclusivamente la memoria?Le CTE usano spazi in tempdb?

Ho taggato la domanda sia con mssql 2005 che con il 2008 perché li uso entrambi.

+0

Le query sono sicuramente riportate in . Vedi anche la sezione qui sotto su "Spazio richiesto dalle query". –

risposta

11

Proverò a non copiare/incollare MSDN

Non importa.

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

Ciò significa che, ad eccezione delle CTE ricorsive (vedere più avanti), , tutte le CTE possono essere codificate in linea. Se si utilizza il codice CTE una volta, è per la leggibilità . Se usi il CTE due o più volte, allora è difensivo: non vuoi fare un errore e avere la tabella derivata diversa ogni volta.

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

Riassunto: può o meno, proprio come se il codice fosse in linea.

Nota: un recursve CTE è semplicemente una tabella derivata in una tabella derivata in una tabella derivata all'interno di una una tabella derivata all'interno di una der ... così stesso vale.

Si può vedere questo in Tony Rogerson's article. L'uso di tempdb avverrebbe comunque se codificato in linea. Egli osserva inoltre che l'utilizzo di una tabella temporanea può essere meglio a causa della espansione "macro" ho spiegato sopra

FYI: lo stesso vale per una vista. Solo macro.

+0

+1 Nessuna risposta per copia/incolla. –

7

Un'espressione di tabella comune può essere pensato come un risultato temporaneo impostato definito nell'ambito esecuzione di una singola SELECT, INSERT, UPDATE, DELETE o CREATE VIEW. Quando il piano di query per una query espressione tavolo comune utilizza un operatore di spool per salvare i risultati delle query intermedi, il Motore di database crea una tabella di lavoro in tempdb a sostegno di questa operazione.

source

4

Da MSDN: http://msdn.microsoft.com/en-us/library/ms345368.aspx

Un'espressione di tabella comune può essere pensato come un insieme risultato temporaneo definito nell'ambito esecuzione di una singola SELECT, INSERT, UPDATE, DELETE, o CREATE VIEW statement.

Quando il piano di query per una query comune espressione di tabella utilizza un operatore di spool per salvare i risultati delle query intermedi, il Motore di database crea un tavolo di lavoro in tempdb a sostegno di questa operazione.