Problem, którego doświadczasz, jest (prawie na pewno) spowodowany buforowanym planem zapytań, który jest odpowiedni dla niektórych wersji parametrów przekazywanych do zapytania, ale nie dla innych (aka Wykrywanie parametrów).
Jest to częste zjawisko, które często pogarszają nieaktualne statystyki i/lub mocno pofragmentowane indeksy.
Pierwszy krok :upewnij się, że odbudowałeś wszystkie swoje indeksy i że statystyki dotyczące nieindeksowanych kolumn są aktualne. (Upewnij się również, że Twój klient ma regularnie zaplanowane zadanie konserwacji indeksu)
exec sp_msforeachtable "DBCC DBREINDEX('?')"
go
exec sp_msforeachtable "UPDATE STATISTICS ? WITH FULLSCAN, COLUMNS"
go
To jest kanoniczne odniesienie:Wolno w aplikacji, szybko w SSMS?
Jeśli problem nadal występuje po odbudowaniu indeksów i aktualizacji statystyk, masz kilka możliwości:
-
Użyj dynamicznego SQL (ale najpierw przeczytaj:Klątwa i błogosławieństwa dynamicznego SQL)
-
Użyj
OPTIMIZE FOR
-
Użyj
WITH(RECOMPILE)