Inconvénients des procédures stockées
souhaitez obtenir une liste des avantages et des inconvénients de l'utilisation de Procédures Stockées. Le principal avantage de SPs semble être précompilé et une abstraction des données de l'application. Donnez-moi vos pensées....
19 réponses
Correction: si elles sont précompilées dépend de la base de données. Dans SQL Server, par exemple, ils ne le sont pas. Les procédures stockées et le SQL paramétré sont compilés avant d'être exécutés. Une procédure stockée peut parfois réutiliser un plan d'exécution si un correspondant existe...mais il en va de même pour le SQL paramétré.
Edit:voici ce que MSDN en dit:
SQL Server 2000 et SQL Server version 7.0 incorporent un certain nombre de des modifications au traitement des instructions qui étendent de nombreux avantages de performance des procédures stockées à toutes les instructions SQL. SQL Server 2000 et SQL Server 7.0 ne sauvegardent pas un plan partiellement compilé pour les procédures stockées lorsqu'elles sont créées. Une procédure stockée est compilée au moment de l'exécution, comme toute autre instruction Transact-SQL. SQL Server 2000 et SQL Server 7.0 retiennent les plans d'exécution pour toutes les instructions SQL dans le cache de procédure, pas seulement les plans d'exécution de procédure stockés.
les Avantages: Fournit une interface" à une base de données (une autre couche d'abstraction).
regroupe également toutes les requêtes au même endroit, ce qui permet aux AD de voir plus facilement comment la base de données est interrogée et de l'optimiser en conséquence.
désavantages: peut ne pas être le meilleur endroit pour mettre la logique complexe. Cependant, en suivant l'idée que la logique complexe appartient au code d'application et non aux procédures stockées, la procédure stockée devient simplement Opérations CRUD (chaque table a une procédure "Create", "Read", "Update" et "Delete"). Dans ce cas, les procédures stockées n'ajoutent aucune valeur à l'application, elles ne font que complexifier l'entretien et deviennent des déchets.
les requêtes sont toutes regroupées, il est donc plus difficile de voir le contexte de l'application où elles sont utilisées. Analyser l'impact d'un changement est plus long, et faire le changement est aussi plus long.
Donc: utiliser des procédures stockées pour encapsuler des requêtes complexes (jointures complexes, clauses complexes where, ...). Mais n'utilisez pas de procédure stockée pour une application/un domaine/une logique commerciale complexe, et n'utilisez pas non plus de procédure stockée pour CRUD. Ainsi, les procédures stockées devraient être utilisées dans une minorité de cas plutôt que d'être l'outil standard pour toutes les requêtes dans une application.
code de groupe (y compris les requêtes) pour atteindre la "cohésion fonctionnelle" au lieu de grouper par outil/technologie. Pour permettre à un DBA d'optimiser une base de données basée sur la façon il est interrogé, utilisez un profileur.
en utilisant SPs, vous évitez également d'avoir à donner aux utilisateurs un accès direct aux tables. Tous les accès peuvent être contrôlés via le SPs.
avec les bibliothèques .net 3.5 framework actuelles, J'utiliserais Linq pour effectuer la plupart des opérations de base de données. Il pourrait y avoir des endroits où SP fait plus de sens. Mais Linq a des dispositions pour gérer un SP aussi.
au sujet des inconvénients de SP, consultez le lien suivant - une analyse intéressante. Consultez aussi les commentaires du blog.
http://www.spoiledtechie.com/post/Whats-up-with-Stored-Procedures-these-days.aspx
avantage: les procédures stockées peuvent être utilisées pour maintenir l'intégrité des données et appliquer la Politique de base de données sans compter sur un programme externe pour le faire.
inconvénient: peut rendre le débogage plus complexe. Peut aussi être sensible au fait d'être abandonné pendant les opérations de copie, si ce n'est pas fait correctement.
désavantages
le remaniement est plus difficile. Renommer ou changer l'endroit où la procédure stockée est pourrait produire un mauvais effet.
test de L'Unité procédure stockée besoin d'assistance de code à l'extérieur de la base de données
Avantage
- Vous n'avez pas besoin de déployer de faire un changement.
- plus rapide parfois
- plus facile d'étendre un système
un autre inconvénient est le contrôle de version, parce qu'une partie de la logique commerciale est maintenant du côté de la base de données. Pouvez-vous facilement revenir en arrière à v1 (il y a un an) de v2 (maintenant)?
une solution réalisable consiste à versionner les noms de procédure stockés. Mais maintenant la base de données est un gâchis avec les anciennes et les nouvelles procédures stockées.
désavantages
- le contrôle à la Source peut être pénible.
- le débogage est difficile.
- si vous avez beaucoup de fonctionnalités dans procs, il sera plus difficile de passer d'un système de base de données à l'autre - cela crée aussi plus de travail si vous voulez prendre en charge différents systèmes de base de données.
- développer des procédures stockées peut être une tâche assez spécialisée, surtout quand elles deviennent plus complexes.
juste quelques raisons pour lesquelles j'utilise exclusivement des procédures stockées lors de la construction d'applications:
- les procédures Stockées peuvent être l'interface entre votre application et la base de données. De cette façon, le serveur sur lequel réside la base de données, qui est généralement plus puissant qu'un ordinateur de bureau, peut être utilisé pour effectuer des procédures plus complexes.
- si vous avez besoin de changer la structure de la base de données, vous pouvez le faire sans casser votre application si elle est stockée les procédures sont utilisées comme interface.
- au fur et à mesure que vous écrivez, les procédures stockées contiennent du SQL précompilé et pré-testé.
- il est plus facile d'effectuer des opérations complexes avec des procédures stockées qu'avec SQL généré par le client ou L'interface graphique.
avantage: le DBA peut ajouter un comportement dont l'application ne se soucie pas. Par exemple, stocker une date de modification sur chaque ligne.
Avantage: votre code lié à la base de données est plus susceptible d'être écrit par le personnel qui est intéressé et compétent au travail de base de données.
l'avantage que je vois dans l'utilisation de procédures stockées par rapport à l'écriture de la même logique dans le code d'application est qu'il peut réduire le nombre d'appels que l'application fait à la base de données.
une procédure stockée peut prendre dans ses arguments et prendre différentes décisions et actions basées sur ces arguments au lieu de retourner un résultat à l'application, puis l'application prendre une décision et décider qu'il doit effectuer une autre action et faire une autre base de données appeler.
le goulot de la bouteille dans la performance est presque toujours la communication inter-processus. J'essaie de passer le moins d'appels possible à la base de données.
avantage: L'équipe des opérations dispose d'un crochet pour surveiller ou corriger les problèmes en production.
un autre avantage peut être dans les environnements de grandes entreprises où vous pourriez avoir plusieurs applications et environnements clients (tels que le web, le bureau, les outils de rapport répartis sur différents systèmes D'exploitation) qui utilisent la base de données. Pour certaines modifications des règles de fonctionnement, le changement peut être effectué dans la base de données, ce qui serait efficace dans tous les environnements.
Avantages:
- organisé en un seul endroit (pas éparpillé sur tout le code)
- beaucoup plus rapide que les requêtes dynamiques
Elle augmente la charge sur le serveur. Si d'autres applications ou plus d'une application utilisant le même serveur de base de données, ils deviennent lents.
la réponse simple serait la suivante:: adv: c'est la structure la plus puissante pour encapsuler les Codes T-SQL. il n'est pas limité à SELECT, et prend en charge tous les codes DML. il fournit à recevoir des entrées et retourner directement des résultats.
dis: il n'est pas possible de l'appeler dans le SELECT, donc vous ne pouvez pas l'Exécuter pour plusieurs dossiers.