이 동작을 이해하려고합니다. 나의 아래 진술은 완료하는데 거의 30 분이 걸린다. 그러나 매개 변수 @IsGazEnabled (하단의 where 절의 case 문에서) 값을 1로 바꾼다면 1 초가 걸립니다.Where 절에 매개 변수를 추가 할 때의 성능
추정 실행 계획을 보면 매개 변수를 사용할 때 30 분이 소요될 때 비용 (92 %)의 대부분은 중첩 루프 (왼쪽 반치 어셈블리)에 있습니다. 또한 어떤 평행주의가 진행되는 것처럼 보입니다. 나는 단지 실행 계획에 관해 배우는 것 뿐이며 조금 혼란 스럽다. 매개 변수를 사용하지 않을 때 생성되는 계획과 매우 다릅니다.
그렇다면 매개 변수를 갖지 않는 것과 비교할 때 매개 변수를 갖는 것이 실행 계획 및 성능에 어떻게 다른가요?
declare @IsGazEnabled tinyint;
set @IsGazEnabled = 1;
select 'CT Ref: ' + accountreference + ' - Not synced due to missing property ref ' + t.PropertyReference
from CTaxAccountTemp t
where not exists (
select *
from ccaddress a
left join w2addresscrossref x on x.UPRN = a.UPRN
and x.appcode in (
select w2source
from GazSourceConfig
where GazSource in (
select GazSource
from GazSourceConfig
where W2Source = 'CTAX'
)
union all select 'URB'
)
where t.PropertyReference = case @IsGazEnabled when 1 then x.PropertyReference else a.PropertyReference end
);
매개 변수를 사용하지 않을 때 어떤 종류의 조인이 사용됩니까? 쿼리 끝에 옵션 (MERGE JOIN) 또는 옵션 (HASH JOIN)을 추가하고 도움이되는지 확인할 수 있습니다. –