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

sp_executesql è lento con i parametri

Aggiungi OPZIONE (RICIMPILA) alla fine

... AND SensorValue != -32767 OPTION (RECOMPILE) 

Sospetto che tu stia riscontrando "sniffing dei parametri"

In tal caso, possiamo lasciarlo con l'OPZIONE o considerare delle alternative

Aggiornamento 1

Il seguente articolo ti introdurrà allo "sniffing dei parametri" http://pratchev.blogspot.be/2007/08/parameter-sniffing.html

Ti consiglio di conoscere i dettagli perché ti renderà molto migliore nella comprensione degli interni del server sql (che possono mordere).

Se lo capisci, saprai che il compromesso con l'opzione ricompilare può essere una riduzione delle prestazioni se l'istruzione viene eseguita molto spesso.

Aggiungo personalmente l'opzione ricompila dopo So che la causa principale è lo sniffing dei parametri e lasciarlo in a meno che non ci sia un problema di prestazioni. La riscrittura di una dichiarazione per evitare un cattivo sniffing dei parametri porta alla perdita di intenti e ciò riduce la manutenibilità. Ma ci sono casi in cui la riscrittura è giustificata (usa buoni commenti quando lo fai).

Aggiornamento 2

La migliore lettura che ho avuto sull'argomento è stata nel capitolo 32 intitolato "Sniffing dei parametri:il tuo migliore amico... tranne quando non è di " di GRANT FRITCHEY

È consigliato.

Approfondimenti di SQL Server MVP, volume 2