2009-03-19 8 views
4

Dans un système que je développe, j'ai le choix d'utiliser une seule procédure stockée qui effectue trois tâches connexes et renvoie soit aucun résultat, soit le même jeu de résultats, mais provenant de deux tables différentes.SQL Server - Procédures individuelles et procédure unique

J'ai lu hier un article qui suggérait qu'une procédure stockée ne devrait avoir qu'un seul plan d'exécution et que toute procédure modifiant son plan d'exécution en fonction d'une différence de paramètres devrait probablement être écrite comme plusieurs procédures. L'écriture de la procédure sous trois procédures différentes changerait la façon dont le système qui exécute les procédures fonctionne mais pas de façon significative. Ce que je voudrais savoir, c'est si les performances obtenues en ayant des procédures qui n'ont pas de plans d'exécution différents en fonction des entrées par rapport à une seule procédure valent l'effort, c'est-à-dire la surcharge de la base de données trois fois plus grande que les frais généraux d'avoir à recompiler le plan de performance en fonction des circonstances?

Merci

Greg

Répondre

2

Vous pourriez envisager d'écrire trois procédures stockées distinctes mais appeler ces d'un seul proc stocké.

+0

Pour des points supplémentaires, quel est le nom de ce modèle? –

+0

haha, je suis nul avec souvenir de ces noms. Je comprends les modèles d'usine et les principes SOLID mais si le concept reste avec moi, le nom doit normalement être rappelé par une recherche google –

+0

dans le but d'un bon débordement propre pile, vous devriez probablement modifier votre propre réponse pour révéler ce motif insaisissable nom –

0

À moins que certains segments fonctionnels ne puissent être réutilisés par d'autres zones de votre système, je recommanderais en fait de conserver une procédure stockée. En règle générale, plus vous avez de SP, plus il y a à maintenir (je pense qu'il y a un peu de frais généraux par SP, en plus des contenus contenus dans le SP).

+0

Aucun des segments fonctionnels n'est réutilisable, ce qui aide à répondre à ma question. Les procédures seraient cependant répétées pour divers objets dans mon système, mais il n'y a pas de généralisation qui peut être appliquée aux routines. – TheMouster

+0

Cela signifie donc que je finirais avec plusieurs procédures où je pourrais en avoir un. La maintenabilité diminuerait en conséquence. – TheMouster

2

Chris Simpson reconnaît correctement l'applicabilité d'un motif de conception que je lui laisse nommer. L'avantage procuré le plus directement par l'application de ce modèle est la simplicité, qui confère une facilité de validation (test) et une facilité de maintenance.

Il peut gains de performance mais cela est imprévisible. Parfois, la complexité confond l'optimiseur de plan de requête. Rompre votre über méthode dans plusieurs stratégies plus spécifiques cas-spécifiques (indice là pour Chris) peut réduire les erreurs qui sont dues à l'élagage agressif d'un très grand arbre de décision, et il peut également permettre par cas optimisations. Quand un cas "spécial" est réellement très typique, cela peut être extrêmement bénéfique. Néanmoins, l'amélioration de la vérifiabilité et de la maintenabilité sont des objectifs louables dans leurs propres droits.

Questions connexes