Ho avuto lo stesso problema del poster originale ma la risposta citata non ha risolto il problema per me. La query è ancora molto lenta da una stored procedure.
Ho trovato un'altra risposta qui "Sniffing dei parametri", grazie Omnibuzz. Si riduce all'utilizzo di "variabili locali" nelle query della procedura memorizzata, ma leggi l'originale per una maggiore comprensione, è un ottimo riassunto. es.
Via lenta:
CREATE PROCEDURE GetOrderForCustomers(@CustID varchar(20))
AS
BEGIN
SELECT *
FROM orders
WHERE customerid = @CustID
END
Via veloce:
CREATE PROCEDURE GetOrderForCustomersWithoutPS(@CustID varchar(20))
AS
BEGIN
DECLARE @LocCustID varchar(20)
SET @LocCustID = @CustID
SELECT *
FROM orders
WHERE customerid = @LocCustID
END
Spero che questo aiuti qualcun altro, così facendo ho ridotto il mio tempo di esecuzione da 5+ minuti a circa 6-7 secondi.