Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Perché eseguire stored procedure è più veloce della query SQL da uno script?

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