2013-08-28 17 views
6

jestem w obliczu problemu z MS SQL Server 2008, który jest:zapytań SQL Server trwa dłużej niż z parametrem stałym ciągiem

Kiedy wykonać kwerendy przy użyciu zakodowane ciąg jako parametr, mój bieg zapytania szybko, ale gdy użyję parametru string, zapytanie trwa dłużej!
Stałe zapytanie ciągiem zajmuje 1 sekundę, a drugie trwa 11 sekund.

Oto kody poniżej:

Ciąg stały (1 sekunda):

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

sparametryzowanej (11 sekund):

DECLARE @country AS CHAR(2); 

SET @country = 'ZA'; 

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

Google "Sniffing parametrów" .... – granadaCoder

+2

Czy porównałeś plany wykonania? Przeczytaj również to: http://www.sqlperformance.com/2013/08/t-sql-queries/parameter-sniffing-embedding-and-tcompre-options-options –

+0

Ponieważ optymalizator nie zna wartości lokalnego Zmienna w drugim zapytaniu najprawdopodobniej zmienia plan kwerendy na użycie skanowania tabeli/indeksu zamiast szukania. – steoleary

Odpowiedz

0

Co to plon?

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

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

Co powiesz na to?

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

Zastosowanie OPCJA (RECOMPILE) na końcu zapytania. A więc:

DECLARE @country AS CHAR(2); 

SET @country = 'ZA'; 

SELECT * 
FROM VIEWCONTENTS 
WHERE COUNTRY = @country 
     AND CONTENTTYPE = 'A' 
     AND TASK = 'R23562' 
OPTION (RECOMPILE) 
Powiązane problemy