2013-08-28 5 views
6

I는 MS SQL Server 2008에 문제에 직면하고있어보다 매개 변수와 함께 오래 걸립니다 빨리하지만 대신 문자열 매개 변수를 사용하면 쿼리가 더 오래 걸립니다!
상수 문자열 쿼리는 1 초가 걸리지 만 다른 쿼리는 11 초가 걸립니다.SQL Server 쿼리는 상수 문자열

상수 문자열 (1 초) :

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

매개 변수화 (11초)이 수율 무엇

DECLARE @country AS CHAR(2); 

SET @country = 'ZA'; 

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

구글 – granadaCoder

+2

당신이 실행 계획을 비교 적이 .... "매개 변수 스니핑"? 또한 읽으십시오 : http://www.sqlperformance.com/2013/08/t-sql-queries/parameter-sniffing-embedding-and-the-recompile-options –

+0

옵티마이 저가 로컬 값을 알지 못하기 때문에 변수는 두 번째 쿼리에서 쿼리 계획보다는 테이블/인덱스 스캔을 사용하는 것이 가장 가능성이 높습니다. – steoleary

답변

0

여기에 코드 노호인가? 이것에 대해

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

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

어떻게

?

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

사용 OPTION (RECOMPILE) 쿼리의 끝에. 그래서 :

DECLARE @country AS CHAR(2); 

SET @country = 'ZA'; 

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