2008-09-10 8 views
3

Je cherche à améliorer les performances de certains SQL, actuellement les CTE sont utilisés et référencés plusieurs fois dans le script. Aurais-je des améliorations en utilisant une variable de table à la place? (Impossible d'utiliser une table temporaire car le code est dans les fonctions).Quels sont les avantages/inconvénients de l'utilisation d'un CTE?

+1

Voir l'explication détaillée de Craig Freedman pour SQL Server [link text] (http://blogs.msdn.com/craigfr/archive/2007/10/18/ctes-common-table-expressions.aspx) –

Répondre

6

Vous aurez vraiment besoin de test de performance - Il n'y a pas de réponse Oui/Non. Selon le lien d'Andy Living ci-dessus, un CTE est simplement un raccourci pour une requête ou une sous-requête.

Si vous l'appelez deux fois ou plus dans la même fonction, vous obtiendrez peut-être de meilleures performances si vous remplissez une variable de table et que vous la joignez à/select. Cependant, comme les variables de table occupent de l'espace quelque part, et n'ont pas d'index/statistiques (à l'exception de toute clé primaire déclarée sur la variable table), il n'y a pas moyen de dire lequel sera le plus rapide. Ils ont tous les deux des coûts et des économies, et le meilleur moyen dépend des données qu'ils collectent et de ce qu'ils en font. J'ai été dans votre situation, et après avoir testé la vitesse sous diverses conditions - Certaines fonctions utilisaient des CTE, et d'autres utilisaient des variables de table.

2

Probablement pas. Les CTE sont particulièrement bons pour interroger les données pour les structures arborescentes.

Questions connexes