Poiché il mio commento sembrava fornire la risposta corretta, ho deciso di spostarlo in una risposta completa per i posteri nello spirito di stackoverflow.
Il tuo problema sembra essere causato da Parameter Sniffing di SQL Server .Per evitarlo, assegna i valori dei parametri in entrata ad altre variabili dichiarate proprio nella parte superiore del tuo SP.
Vedi questo bell'articolo a riguardo
Esempio:
CREATE PROCEDURE dbo.MyProcedure
(
@Param1 INT
)
AS
declare @MyParam1 INT
set @MyParam1 = @Param1
SELECT * FROM dbo.MyTable WHERE ColumnName = @MyParam1
GO
Ho copiato queste informazioni da eggheadcafe.com .
Modifica:secondo il commento di Johann Strydom, ecco un'altra opzione:Ottimizza le query basate su parametri con SQL Server OPTIMIZE FOR Hint .