2013-08-28 8 views
6

sto affrontando un problema con MS SQL Server 2008 che è:query SQL Server richiede più tempo con il parametro che con costante stringa

Quando eseguo una query utilizzando una stringa hard-coded come parametro, la mia corsa di query veloce ma quando uso un parametro stringa, invece, la query impiega più tempo!
La query di stringa costante impiega 1 secondo mentre l'altra impiega 11 secondi.

Ecco i codici qui sotto:

stringa costante (1 secondo):

 SELECT * 
FROM VIEWCONTENTS 
WHERE COUNTRY = 'ZA' 
     AND CONTENTTYPE = 'A' 
     AND TASK = 'R23562'; 

parametrizzata (11 secondi):

DECLARE @country AS CHAR(2); 

SET @country = 'ZA'; 

SELECT * 
FROM VIEWCONTENTS 
WHERE COUNTRY = @country 
     AND CONTENTTYPE = 'A' 
     AND TASK = 'R23562' 
+3

Google "sniffing dei parametri" .... – granadaCoder

+2

Hai confrontato i piani di esecuzione? Leggi anche: http://www.sqlperformance.com/2013/08/t-sql-queries/parameter-sniffing-embedding-and-the-recompile-options –

+0

Poiché l'ottimizzatore non conosce il valore del locale variabile nella seconda query è molto probabile che il piano di query venga modificato per utilizzare una scansione tabella/indice anziché una ricerca. – steoleary

risposta

0

Cosa fa questo rendimento?

DECLARE @country AS VARCHAR(2); 
SET @country = 'ZA'; 

SELECT * 
FROM VIEWCONTENTS 
WHERE COUNTRY = @country 
     AND CONTENTTYPE = 'A' 
     AND TASK = 'R23562' 

Che ne dici di questo?

DECLARE @country AS CHAR(2); 
DECLARE @country1 AS VARCHAR(2); 
SET @country = 'ZA'; 
SET @country1 = @country; 

SELECT * 
FROM VIEWCONTENTS 
WHERE COUNTRY = @country 
     AND CONTENTTYPE = 'A' 
     AND TASK = 'R23562' 
2

Usa OPTION (RECOMPILE) alla fine della query. Quindi:

DECLARE @country AS CHAR(2); 

SET @country = 'ZA'; 

SELECT * 
FROM VIEWCONTENTS 
WHERE COUNTRY = @country 
     AND CONTENTTYPE = 'A' 
     AND TASK = 'R23562' 
OPTION (RECOMPILE) 
Problemi correlati