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

Pourquoi exécuter des procédures stockées est plus rapide qu'une requête SQL à partir d'un script ?

SQL Server passe essentiellement par ces étapes pour exécuter tout requête (appel de procédure stockée ou instruction SQL ad hoc) :

1) vérifier la syntaxe de la requête
2) si tout va bien :il vérifie le cache du plan pour voir s'il a déjà un plan d'exécution pour cette requête3) s'il existe un plan d'exécution :ce plan est ( ré-)utilisé et la requête exécutée
4) s'il n'y a pas encore de plan, un plan d'exécution est déterminé
5) ce plan est stocké dans le cache de plan pour une réutilisation ultérieure
6) le la requête est exécutée

Le fait est :le SQL ad hoc et les procédures stockées sont traités pas différemment .

Si une requête SQL ad hoc utilise correctement des paramètres - comme il se doit de toute façon, pour empêcher les attaques par injection SQL - ses caractéristiques de performance ne sont pas différentes et certainement pas pires que d'exécuter une procédure stockée.

Les procédures stockées ont d'autres avantages (pas besoin d'accorder aux utilisateurs un accès direct à la table, par exemple), mais en termes de performances, l'utilisation de requêtes SQL ad hoc correctement paramétrées est tout aussi efficace comme l'utilisation de procédures stockées.

Mise à jour : en utilisant des procédures stockées sur non paramétrées requêtes est préférable pour deux raisons principales :

  • puisque chaque requête non paramétrée est une nouvelle, différente requête à SQL Server, il doit passer par toutes les étapes de détermination du plan d'exécution, pour chaque requête (ce qui fait perdre du temps - et gaspille également de l'espace de cache de plan, car stocker le plan d'exécution dans le cache de plan n'aide pas vraiment à la fin , puisque cette requête particulière ne sera probablement pas être exécuté à nouveau)

  • les requêtes non paramétrées sont exposées au risque d'attaque par injection SQL et doivent être évitées à tout prix