2014-04-20 1 views
0

최적화 된 쿼리에 대한 빠른 도움말. 매우 느리게 실행되는 쿼리가 있습니다.최적화 된 쿼리에 대한 빠른 도움

Select 
P.* 
from 
dbo.Parent P 
where 
exists 
(
Select 1 
From 
dbo.Child C 
Where 
1 = 1 
and C.ColumnName1 = case when @p_ParameterValue is null then C.ColumnName1 else P.ColumnName1 end 
and C.ColumnName2 = isnull(@p_ParameterValue,C.ColumnName2) 
) 

매개 변수 값이있을 때 발생합니다. 내가 정상화하려고 할 때. 그것은 정말로 작동합니다. 나는 부모에 약 60K 레코드가 있고 각 Column1에 대해 Child에 레코드가 있습니다. ColumnName1 및 ColumnName2는 Child의 클러스터 된 인덱스입니다.

Select 
P.* 
from 
dbo.Parent P 
where 
exists 
(
Select 1 
From 
dbo.Child C 
Where 
1 = 1 
and C.ColumnName1 = P.ColumnName1 
and C.ColumnName2 = @p_ParameterValue 
) 

답변

0

당신은 해결책을 sargable

Select P.* 
from dbo.Parent P 
where exists 
(
    Select 1 
    From dbo.Child C 
    Where 1 = 1 
    and (@p_ParameterValue is null OR C.ColumnName1 = P.ColumnName1) 
    and (@p_ParameterValue is null OR C.ColumnName2 = @p_ParameterValue) 
) 
+0

감사 TomT을 할 수있는 위치에있는 상태를 다시 작성해야합니다. 나는 오늘 노력하고 성과에 대해 당신을 업데이트 할 것입니다. –

관련 문제