2011-08-31 3 views
0

다음과 같은 샘플 쿼리가있는 큰 테이블을 사용하여 일치하는 결과를 검색합니다.여러 외부 적용 행이있는 큰 테이블 성능 비교

Select col1,col2,col3 
from 
Table1 T1 
OUTER APPLY (select col2 from Table2 Where t2id=T1.id) 
OUTER APPLY (select col3 from Table3 Where t3id=T1.id) 
Where col3>0 

문제점은 Where 절 열 값 확인시 매우 느리게 실행됩니다.

성능 향상없이 ​​CROSS APPLY를 포함한 다른 접근 방식을 시도했습니다.

아이디어가 있으십니까?

+1

후 쿼리 계획 .... 플러스 테이블의 ACHEMA 덴, 플러스 두 번째 외부에서 열에 대해 비교되기 때문에 해당 테이블 –

+1

에 정의 된 인덱스를 적용 결과한다 바깥쪽에있을 필요는 없지만 대신에 "교차 적용"으로 바꿀 수 있습니다. 쿼리 계획에 차이가있을 수 있습니다. –

+1

바보 같은 질문 :이 쿼리는'SELECT T1.col1, T2.col2, T3.col3로 재 작성 될 수 없다. Table1로부터 T1 LEFT JOIN Table2 T2 ON T1.id = T2.t2id LEFT JOIN Table3 T3 ON T1.id = T3 .t3id 어디 T3.col3> 0'입니까? 대답이 "예"이면이 쿼리가 더 빠르거나 느리거나 같은 시간이 걸립니까? – Marco

답변

1

select 절 내에서 where 절을 이동해보십시오. 이 계산 적은 열 발생 때문에 빠른

Select col1,col2,col3 
from 
Table1 T1 
OUTER APPLY (select col2 from Table2 Where t2id=T1.id) 
OUTER APPLY (select col3 from Table3 Where t3id=T1.id Where col3>0)