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

Gibt TSQL schnellere Ergebnisse zurück als gespeicherte Prozeduren in SQL Server

Fügen Sie in Ihren Abfragen OPTION(OPTIMIZE FOR UNKNOWN) hinzu (als letzte Klausel), um Parameter-Sniffing zu verhindern. Syntax und Erklärung finden Sie in der Dokumentation zu Abfragehinweisen .

Wenn SQL Server zum ersten Mal eine gespeicherte Prozedur ausführt, optimiert SQL Server die Ausführungspläne für die übergebenen Parameter. Dies geschieht in einem Prozess, der als Parameter Sniffing bezeichnet wird .

Im Allgemeinen werden Ausführungspläne von SQL Server zwischengespeichert, sodass SQL Server nicht jedes Mal für dieselbe Abfrage neu kompilieren muss. Wenn die Prozedur das nächste Mal ausgeführt wird, verwendet SQL Server die Ausführungspläne für die darin enthaltenen Abfragen erneut ... Die Ausführungspläne können jedoch völlig ineffizient sein, wenn Sie sie mit anderen Parametern aufrufen .

Die Option, die ich Ihnen gegeben habe, teilt dem SQL-Compiler mit, dass der Ausführungsplan nicht für spezifische optimiert werden sollte Parameter, sondern für beliebige Parameter, der an die gespeicherte Prozedur übergeben wird.

Um die Dokumentation zu zitieren:

In manchen Fällen können Stored Procedures vom Parameter Sniffing profitieren, in manchen Fällen nicht. Für gespeicherte Prozeduren, die nicht vom Paramater Sniffing profitieren, können Sie die Option zu jeder Abfrage hinzufügen, die einen der Parameter der gespeicherten Prozedur verwendet.