2008-11-14 7 views
3

IF ... ELSE과 같은 조건문은 SQL Server 2005의 쿼리 실행 계획에 어떤 영향을 줍니까?SQL Server - 조건부 문의 쿼리 실행 계획

조건문을 사용하면 실행 계획이 잘못되거나 성능을 고려할 때주의해야 할 조건부 형식이 있습니까?

은 ** 추가 편집 ** : 나는 특히 캐시 된 쿼리 실행 계획을 말하는 겁니다

. 예를 들어 아래 사례에서 쿼리 실행 계획을 캐싱 할 때 조건부 결과의 각 결과에 대해 두 개의 실행 계획이 캐시됩니까?

DECLARE @condition BIT 

IF @condition = 1 
BEGIN 
    SELECT * from ... 
END 
ELSE 
BEGIN 
    SELECT * from .. 
END 

답변

2

이 방법으로 계획 재 컴파일을 자주 받게됩니다. 나는 일반적으로 그들을 분리하려고, 그래서 당신은 끝낼 : 최종 사용자에 아무런 차이가 없습니다

DECLARE @condition BIT 

IF @condition = 1 
BEGIN 
EXEC MyProc1 
END 
ELSE 
BEGIN 
EXEC MyProc2 
END 

이 방법, 및 MyProc1 &이 자신의 적절한 캐시 된 실행 계획을 얻을. 하나의 절차, 하나의 쿼리.

+0

@Meff (+1)이 정확합니다. 내 이전의 대답은 아니었다 (나는 그것을 삭제했다). –