2011-12-07 2 views
2

SQL 쿼리에 성능 문제가 있습니다. 이 내 쿼리매개 변수에 SQL Server 성능 문제가 발생했습니다.

declare @siteId int,  
@totalCount int 

SELECT @totalCount = COUNT(DISTINCT pro.product_id) 
    FROM product AS pro 
    INNER JOIN product_to_category AS proCat ON pro.product_id = proCat.product_id 
    INNER JOIN product_to_vendor proVen ON pro.product_id = proVen.product_id 
WHERE pro.site_id = @siteId 
    AND pro.product_type <> 3 
print @totalCount 

그것은 실행 6 초 정도 걸릴 것입니다 ..

내가

@totalCount int 

SELECT @totalCount = COUNT(DISTINCT pro.product_id) 
FROM product AS pro 
INNER JOIN product_to_category AS proCat ON pro.product_id = proCat.product_id 
INNER JOIN product_to_vendor proVen ON pro.product_id = proVen.product_id 
WHERE pro.site_id = 28 
AND pro.product_type <> 3 
print @totalCount 

을 다음과 같이 매개 변수를 제거하고 다시 쿼리를 실행

, 그것은 단지 2 초 정도 걸립니다.

이 같은 쿼리의 성능을 향상시키는 방법은 무엇입니까? 매개 변수에 값을 할당하는 데 시간이 걸리는 이유는 무엇입니까? 모든 댓글 ....

+1

테이블에 인덱싱이 있습니까? – Taryn

+0

@ Tharaka, 하드 코드 된 버전을 실행 한 후 매개 변수화 된 버전의 쿼리를 즉시 다시 실행하려고 시도 했습니까? 그렇다면 얼마나 걸리나요? –

+0

product.site_id int입니까? – gbn

답변

2

이것은 변수가 아닙니다. 이 컴파일 타임에 알하지 않도록

SQL Server는 포함 할 값이 28

이는 후 문을 다시 컴파일 얻을 쿼리의 끝에 OPTION (RECOMPILE) 추가 것을 변수의 값을 도청하지 않습니다 변수의 값이 할당되었으며 더 적절한 실행 계획을 생성해야합니다.

+0

OPTION (RECOMPILE)을 시도했습니다. 그것은 중첩 된 저장 프로 시저가 아닌 하위 저장 프로 시저에 적합합니다. 다른 솔루션이 있습니까? – Tharaka

+0

당신은 질의 끝에 그것을 추가합니다. ... ... 어디서 pro.site_id = @siteId AND pro.product_type <> 3 OPTION (RECOMPILE)' –

관련 문제