Det problem, du oplever, skyldes (næsten helt sikkert) en cachelagret forespørgselsplan, som er passende for nogle versioner af parametre, der sendes til forespørgslen, men ikke for andre (alias Parameter Sniffing).
Dette er en almindelig hændelse og forværres ofte af forældede statistikker og/eller dårligt fragmenterede indekser.
Første trin :Sørg for, at du har genopbygget alle dine indekser, og at statistik over ikke-indekserede kolonner er opdateret. (Sørg også for, at din klient har et regelmæssigt planlagt indeksvedligeholdelsesjob)
exec sp_msforeachtable "DBCC DBREINDEX('?')"
go
exec sp_msforeachtable "UPDATE STATISTICS ? WITH FULLSCAN, COLUMNS"
go
Dette er den kanoniske reference:Langsom i applikationen, hurtig i SSMS?
Hvis problemet stadig eksisterer efter genopbygning af indekser og opdatering af statistik, så har du et par muligheder:
-
Brug dynamisk SQL (men læs dette først:The Curse and Blessings ofDynamic SQL)
-
Brug
OPTIMIZE FOR
-
Brug
WITH(RECOMPILE)