I dina frågor lägger du till OPTION(OPTIMIZE FOR UNKNOWN)
(som den sista satsen) för att förhindra parametersniffning. För syntax och förklaring, se dokumentationen på Frågetips
.
Vad SQL Server gör första gången den kör en lagrad procedur är att optimera exekveringsplanerna för parametrarna som skickades till den. Detta görs i en process som kallas Parameter Sniffing
.
I allmänhet cachelagras exekveringsplaner av SQL Server så att SQL Server inte behöver kompileras om varje gång för samma fråga. Nästa gång proceduren körs kommer SQL Server att återanvända exekveringsplanen/-planerna för frågorna i den... Exekveringsplanen/-planerna kan dock vara totalt ineffektiva om du kallar den (dem) med olika parametrar .
Alternativet jag gav dig kommer att berätta för SQL-kompilatorn att exekveringsplanen inte bör optimeras för specifika parametrar, utan snarare för alla parameter som skickas till den lagrade proceduren.
För att citera dokumentationen:
I vissa fall kan lagrade procedurer dra nytta av Parameter Sniffing, i vissa fall inte. För de lagrade procedurerna som inte drar nytta av Paramater Sniffing, kan du lägga till alternativet för varje fråga som använder någon av parametrarna för den lagrade proceduren.