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

sp_executesql est lent avec les paramètres

Ajoutez OPTION (RECOMPILE) à la fin

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

Je soupçonne que vous rencontrez un "renifleur de paramètres"

Si tel est le cas, nous pouvons le laisser avec l'OPTION ou envisager des alternatives

Mise à jour 1

L'article suivant vous initiera au "parameter sniffing" http://pratchev.blogspot.be/2007/08/parameter-sniffing.html

Je vous conseille de connaître les tenants et les aboutissants, car cela vous permettra de mieux comprendre les composants internes du serveur sql (qui peuvent mordre).

Si vous le comprenez, vous saurez que le compromis avec l'option recompiler peut être une diminution des performances si l'instruction est exécutée très souvent.

J'ajoute personnellement l'option recompiler après Je sais que la cause principale est le reniflage des paramètres et le laisse à moins qu'il n'y ait un problème de performances. La réécriture d'une instruction pour éviter le reniflage de mauvais paramètres entraîne une perte d'intention, ce qui réduit la maintenabilité. Mais il y a des cas où la réécriture est justifiée (utilisez de bons commentaires quand vous le faites).

Mise à jour 2

La meilleure lecture que j'ai eue sur le sujet était dans le chapitre 32 intitulé "Parameter sniffing :your best friend... except when it is not by" par GRANT FRITCHEY

C'est recommandé.

Présentations approfondies de SQL Server MVP, volume 2