Ho una tabella con oltre 100 milioni di record. La tabella ha un indice cluster e un indice non cluster.La stored procedure di SQL Server è molto più lenta della query diretta
Posso eseguire un conteggio di base utilizzando T-SQL sul tavolo e ci vuole 1 secondo per l'esecuzione. Quando inserisco la stessa esatta query di conteggio all'interno di una procedura memorizzata, sono necessari 12 secondi per l'esecuzione.
Ho esaminato il piano di esecuzione per la query standard e la stored procedure e entrambi utilizzano l'indice non cluster.
Non sono sicuro del motivo per cui la stored procedure è così lenta rispetto alla query standard.
Ho letto alcune cose sulla reindicizzazione in una situazione come questa, ma non sono sicuro del motivo per cui ho bisogno di farlo. Inoltre, ci vogliono alcune ore per reindicizzare, quindi voglio assicurarmi che funzioni.
Qualsiasi aiuto su questo sarebbe fantastico.
Grazie
UPDATE
Ecco la stored procedure:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE quickCount
@sYID INT,
@eYID INT
AS
BEGIN
SET NOCOUNT ON;
SELECT COUNT(leadID)
FROM dbo.leads
WHERE yearID >= @sYID
AND yearID <= @eYID
END
GO
e qui è la query standard:
SELECT COUNT(leadID)
FROM leads
WHERE yearID >= 0
AND yearID <= 99
ho provato a farlo funzionare senza parametri e l'SP scorre più veloce (1 secondo). Quindi presumo che abbia qualcosa a che fare con i parametri.
ci mostri un po 'di SP, doe si passa tutti i parametri? –
Penso che dovrai mostrare la tua query e SP. –
Può capitare che tu abbia provato una query con costanti e che la tua procedura utilizzi i parametri al posto di queste costanti. Ti suggerisco di creare un esempio SQLFiddle o di pubblicare alcuni dettagli sullo schema e query/sp –