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

Pourquoi CTE est-il meilleur que curseur/table dérivée/sous-requêtes/table temporaire etc. ?

Un CTE (non récursif) n'utilise pas de curseurs. C'est une approche basée sur les ensembles. C'est la grande différence par rapport à l'utilisation de curseurs. Mais c'est vrai de ne pas utiliser les curseurs en général.

Les curseurs doivent être évités dans la mesure du possible (comme je suis sûr que nous le savons tous).

Un CTE n'est pas nécessairement meilleur que l'utilisation d'une table dérivée, mais conduit à un code TSQL plus compréhensible. Un CTE n'est en réalité qu'un raccourci pour une requête ou une sous-requête ; quelque chose qui ressemble à une vue temporaire.

La situation où le CTE n'est peut-être pas la meilleure approche, c'est lorsque l'optimiseur de plan de requête obtient des estimations de lignes inexactes pour le CTE.

Question connexe :Quels sont les avantages/inconvénients de l'utilisation d'un CTE ?