CTE
est juste un alias pour la requête.
Il peut (ou non) être réexécuté à chaque fois qu'il est utilisé.
Il n'y a pas de moyen propre de forcer CTE
matérialisation dans SQL Server
(comme /*+ MATERIALIZE */
d'Oracle ), et vous devez faire des trucs sales comme celui-ci :
CTE
peut améliorer les performances s'il est utilisé dans des plans ne nécessitant qu'une seule évaluation (comme HASH JOIN
, MERGE JOIN
etc.).
Dans ces scénarios, la table de hachage sera construite directement à partir du CTE
, tandis que l'utilisation de la table temporaire nécessitera d'évaluer le CTE
, en extrayant les résultats dans la table temporaire et en lisant à nouveau la table temporaire.