In pratica, SQL Server esegue questi passaggi per eseguire qualsiasi query (chiamata di stored procedure o istruzione SQL ad hoc):
1) controlla sintatticamente la query
2) se va bene - controlla la cache del piano per vedere se ha già un piano di esecuzione per quella query
3) se esiste un piano di esecuzione - quel piano è ( ri-)utilizzato e la query eseguita
4) se non esiste ancora un piano, viene determinato un piano di esecuzione
5) quel piano viene archiviato nella cache del piano per un successivo riutilizzo
6) il la query viene eseguita
Il punto è:l'SQL ad hoc e le procedure memorizzate sono trattati non diversamente .
Se una query SQL ad hoc utilizza correttamente i parametri, come dovrebbe comunque, per prevenire attacchi di SQL injection, le sue caratteristiche prestazionali non sono diverse e sicuramente non peggio rispetto all'esecuzione di una procedura memorizzata.
La stored procedure ha altri vantaggi (non è necessario concedere agli utenti l'accesso diretto alle tabelle, ad esempio), ma in termini di prestazioni, l'utilizzo di query SQL ad hoc adeguatamente parametrizzate è altrettanto efficiente come utilizzando procedure archiviate.
Aggiornamento: utilizzando stored procedure su non parametrizzato query è meglio per due motivi principali:
-
poiché ogni query non parametrizzata è una nuova, diversa query a SQL Server, deve eseguire tutti i passaggi per determinare il piano di esecuzione, per ogni query (perdendo così tempo e anche sprecando spazio nella cache del piano, poiché l'archiviazione del piano di esecuzione nella cache del piano non aiuta alla fine , poiché quella particolare query probabilmente non essere eseguito di nuovo)
-
le query non parametrizzate sono a rischio di attacco SQL injection e dovrebbero essere evitate a tutti i costi