Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Pourquoi ce CTE est-il tellement plus lent que l'utilisation de tables temporaires ?

Comme vous pouvez le voir dans le plan de requête, avec les CTE, le moteur se réserve le droit de les appliquer essentiellement comme une recherche, même lorsque vous souhaitez une jointure.

S'il n'est pas assez sûr, il peut exécuter le tout indépendamment, à l'avance, en générant essentiellement une table temporaire ... exécutons-le simplement une fois pour chaque ligne.

C'est parfait pour les requêtes récursives qu'ils peuvent faire comme par magie.

Mais vous voyez - dans les boucles imbriquées - où cela peut terriblement mal tourner.
Vous trouvez déjà la réponse par vous-même en essayant la vraie table temporaire.