Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

sp_executesql ist langsam mit Parametern

OPTION (RECOMPILE) am Ende hinzufügen

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

Ich vermute, Sie erleben "Parameter-Sniffing"

Wenn das der Fall ist, können wir es bei der OPTION belassen oder Alternativen prüfen

Aktualisierung 1

Der folgende Artikel führt Sie in das "Parameter-Sniffing" ein http://pratchev.blogspot.be/2007/08/parameter-sniffing.html

Ich rate Ihnen, sich mit den Einzelheiten vertraut zu machen, da Sie dadurch die Interna von SQL-Servern (die beißen können) viel besser verstehen.

Wenn Sie es verstehen, werden Sie wissen, dass der Kompromiss mit der Option recompile kann eine Leistungsminderung sein, wenn die Anweisung sehr ausgeführt wird oft.

Ich persönlich füge die Option neu kompilieren nach hinzu Ich weiß, dass die Hauptursache das Parameter-Sniffing ist, und lasse es drin, es sei denn, es gibt ein Leistungsproblem. Das Umschreiben einer Anweisung, um ein schlechtes Parameter-Sniffing zu vermeiden, führt zu einem Verlust der Absicht und dies verringert die Wartbarkeit. Aber es gibt Fälle, in denen das Umschreiben gerechtfertigt ist (verwenden Sie gute Kommentare, wenn Sie dies tun).

Aktualisierung 2

Die beste Lektüre, die ich zu diesem Thema hatte, war in Kapitel 32 mit dem Titel "Parameter-Sniffing:Ihr bester Freund ... außer wenn es nicht vorbei ist" von GRANT FRITCHEY

Es wird empfohlen.

SQL Server MVP Deep Dives, Band 2