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

Fonction de valeur de table tuant mes performances de requête

Le retour d'une variable de table en fera une fonction de valeur de table multi-instructions et peut être mauvais pour les performances en raison du fait qu'il est traité comme une table, sauf qu'il n'y a pas de statistiques disponibles sur lesquelles SQL Server peut baser un bon plan d'exécution - il estimera donc la fonction comme renvoyant un très petit nombre de lignes. S'il renvoie un plus grand nombre de lignes, le plan généré pourrait donc être bien moins qu'optimal.

Alors que renvoyer juste un SELECT en fait une fonction de table en ligne - pensez-y plus comme une vue. Dans ce cas, les tables sous-jacentes réelles sont intégrées à la requête principale et un meilleur plan d'exécution peut être généré sur la base de statistiques appropriées. Vous remarquerez que dans ce cas, le plan d'exécution n'aura PAS de mention de la fonction car il ne fait que fusionner la fonction dans la requête principale.

Il y a une excellente référence à ce sujet sur MSDN par les ingénieurs CSS SQL Server, y compris (citation) :