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

Perché CTE è migliore di cursore/tabella derivata/sottoquery/tabella temporanea ecc.?

Un CTE (non ricorsivo) non utilizza i cursori. È un approccio basato sugli insiemi. Questa è la grande differenza rispetto all'utilizzo dei cursori. Ma questo vale per il non utilizzo dei cursori in generale.

I cursori dovrebbero essere evitati ove assolutamente possibile (come sono sicuro tutti sappiamo).

Un CTE non è necessariamente migliore dell'utilizzo di una tabella derivata, ma porta a un codice TSQL più comprensibile. Un CTE è in realtà solo una scorciatoia per una query o una sottoquery; qualcosa di simile a una vista temporanea.

La situazione in cui i CTE potrebbero non essere l'approccio migliore è quando l'ottimizzatore del piano di query ottiene stime di riga imprecise per il CTE.

Domanda correlata:quali sono i vantaggi/svantaggi dell'utilizzo di un CTE?