2008-10-16 9 views
7

Possible en double:
Are Stored Procedures more efficient, in general, than inline statements on modern RDBMS's?Des procédures sont stockées plus rapidement pour les requêtes simples

Si j'exécute une procédure stockée pour les requêtes de base, tels que:

SELECT ColA, ColB FROM MyTable WHERE ID = 123; 
SELECT * FROM MyTable,OtherTable WHERE MyTable.ID = OtherTable.ID ORDER BY CreatedAt desc 

Y at-il bénéficier de la conversion de ces requêtes à une procédure stockée si elles sont exécutées fréquemment? Quand est-il préférable d'utiliser un achat stocké? Quand dois-je pas utiliser une procédure stockée?

Quels types d'optimisations, le cas échéant, se produisent lorsque vous créez et exécutez une procédure stockée? Pouvez-vous recommander des ressources pour m'aider à comprendre quand et pourquoi je devrais les utiliser? En cas de différences, ma base de données est un MS SQL 2005 db.

Répondre

12

Raisons d'utiliser des procédures stockées:

  • réduire le trafic réseau - vous devez envoyer l'instruction SQL à travers le réseau. Avec sprocs, vous pouvez exécuter SQL par lots, ce qui est également plus efficace.
  • Plan de requête de mise en cache - Lors de la première exécution du sproc, SQL Server crée un plan d'exécution qui est mis en cache pour être réutilisé. Ceci est particulièrement performant pour les petites requêtes exécutées fréquemment.
  • Possibilité d'utiliser les paramètres de sortie - si vous envoyez un code SQL inline renvoyant une ligne, vous ne pouvez récupérer qu'un jeu d'enregistrements. Avec les sprocs, vous pouvez les récupérer en tant que paramètres de sortie, ce qui est considérablement plus rapide.
  • Permission - lorsque vous envoyez SQL en ligne, vous devez accorder des autorisations sur la table (s) à l'utilisateur, qui accorde un accès beaucoup plus que l'autorisation d'exécuter simplement l'octroi d'une sproc
  • Séparation de la logique - supprime le code générateur SQL et le sépare dans la base de données.
  • Possibilité d'éditer sans recompiler - cela peut être controversé. Vous pouvez éditer le SQL dans un sproc sans avoir à recompiler l'application.
  • Rechercher une table utilisée - avec sprocs, si vous souhaitez trouver toutes les instructions SQL faisant référence à une table particulière, vous pouvez exporter le code sproc et le rechercher. C'est beaucoup plus facile que d'essayer de le trouver dans le code.
  • Optimisation - Il est plus facile pour un administrateur de base de données d'optimiser le SQL et de régler la base de données lorsque des sprocs sont utilisés. Il est plus facile de trouver des index manquants et autres.
  • Attaques par injection SQL - Le code SQL correctement inséré peut se défendre contre les attaques, mais les sprocs sont meilleurs pour cette protection.
+0

Excellents points. Je souhaite surtout que plus de programmeurs se rendent compte à quel point la fraude à leur base de données est vulnérable s'ils établissent des permissions au niveau de la table. – HLGEM

+1

Effrayant, hein?Si je comprends bien, de nombreuses opérations Linq utilisant SQL généré au lieu de procédures stockées ne font qu'accroître la pratique de l'accès direct à la table. Continuez à faire passer votre message! – DOK

Questions connexes