SQL Server: les Fonctions de Table vs Procédures Stockées
J'ai fait beaucoup de lecture sur les plans d'exécution et les problèmes de dynamique des paramètres dans des procédures stockées. Je sais que les solutions suggérées.
Ma question, cependant, est tout ce que j'ai lu indique que SQL Server met en cache le plan d'exécution de procédures stockées. Aucune mention n'est faite de la Table des fonctions. Je suppose qu'il le fait pour les Vues (hors intérêts).
T-il recompiler à chaque fois qu'un Tableau de valeur de la fonction est appelée?
Quand est-il préférable d'utiliser un Tableau de valeur de la fonction, par opposition à une procédure stockée?
- double possible de les Fonctions vs Procédures Stockées
- Cette question a été posée et a répondu il y a 3 ans. Quel est le but de la fermeture de ce savoir, même si c'est un doublon, comme le prétend?
Vous devez vous connecter pour publier un commentaire.
Une ligne de la fonction table (TVF) est comme une macro: il est étendu dans la requête externe. Il n'a pas de plan en tant que tel: l'appel de SQL a un plan.
Un multi-déclaration TVF a un plan (trouverez une référence).
Tvf sont utiles lorsque vous souhaitez modifier la liste de sélection pour l'un de paramétrer l'entrée. Inline Tvf sont développées et que la sélection externe/où seront considérés par l'optimiseur. Pour le multi-déclaration Tvf l'optimisation n'est pas vraiment possible, car il doit exécuter jusqu'à la fin, puis filtre.
Personnellement, je préfère utiliser une procédure stockée sur un multi-déclaration TVF. Ils sont plus flexibles (par exemple, des conseils, peut changer d'état, SET NOCOUNT on, ENSEMBLE XACTABORT etc).
Je n'ai aucune objection à inline Tvf, mais n'ont pas tendance à les utiliser pour le client en face de code en raison de l'incapacité à utiliser ENSEMBLE et changer d'état.
SELECT col1, col2 from tvf WHERE foo = bar
. Une ligne TVF (ou une procédure stockée qui a seulement col1 et col2) vont travailler sur le plan de col1, col2 avec la où la. Un multi TVF a à exécuter pour tous les 20 colonnes, bobine de résultats, puis filtre, puis limiter à 2 colonnes.Je n'ai pas vérifié, mais je prends pour acquis que le plan d'exécution de fonctions sont également mis en cache. Je ne vois pas pourquoi ce ne serait pas possible.
Le plan d'exécution pour les vues sont toutefois pas mis en cache. La requête en vue de faire partie de la requête qui utilise la vue, de sorte que le plan d'exécution peuvent être mises en cache pour la requête qui utilise la vue, mais pas pour la vue elle-même.
L'utilisation des fonctions de rapport stockées procedured dépend de ce résultat que vous avez besoin de elle. Une table de fonction peut retourner qu'un seul résultat, alors qu'une procédure stockée peut retourner un résultat, de nombreux résultats, ou pas de résultat du tout.