Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

sp_executesql é lento com parâmetros


Adicione OPTION (RECOMPILE) ao final
... AND SensorValue != -32767 OPTION (RECOMPILE) 

Eu suspeito que você está experimentando "sniffing de parâmetro"

Se for esse o caso, podemos deixá-lo com a OPÇÃO ou considerar alternativas

Atualização 1

O artigo a seguir irá apresentá-lo ao "sniffing de parâmetros" http://pratchev.blogspot.be/2007/08/parameter-sniffing.html

Eu aconselho que você conheça os meandros porque isso o tornará muito melhor na compreensão dos internos do sql server (que podem morder).

Se você entender, saberá que a compensação com a opção recompilar pode haverá uma diminuição de desempenho se a instrução for executada muito frequentemente.

Eu pessoalmente adiciono a opção recompilar depois Eu sei que a causa raiz é o sniffing de parâmetros e deixo-o a menos que haja um problema de desempenho. Reescrever uma instrução para evitar a detecção de parâmetros incorretos leva à perda de intenção e isso reduz a capacidade de manutenção. Mas há casos em que a reescrita é justificada (use bons comentários quando fizer isso).

Atualização 2

A melhor leitura que tive sobre o assunto foi no capítulo 32 chamado "Sniffing de parâmetros:seu melhor amigo... exceto quando não é por " por GRANT FRITCHEY

É recomendado.

Mergulhos profundos do SQL Server MVP, Volume 2