안녕하세요.
훔. 오라클의 경우나 ms-sql이나 비슷하다는 생각에 몇자 적어 봅니다.
일당 outer jonin을 하면 옵티마이져는 풀테이블 스켄을 합니다.
첫번째 쿼리는 아웃조인을 하여서 풀테이블 스켄을 할것이고 아웃조인이 걸린 테이블이 먼저 드라이빙이 될것입니다.
그렇다면 드라이빙의 조건은 작은 테이블에서 많은 테이블로 읽혀지는 것이 유리한데. 만약 드라이빙 테이블이 데이타가 100만건이라면 문제가 심각하겠죠.
그렇담. 아웃조인이 없을경우..
MS-sql의 옵티마이져는 비용기준 이기 때문에 테이블정보와 통계정보를 보고 드라이빙 테이블을 그 기준에 따라 선택을 할것입니다.
아마 실행계획을 보시면 이해가 가실텐데.
처음 쿼리와 나중쿼리는 엄청난 차이가 있다는 것을 아시고...
아웃조인은 꼭필요한 경우에만 사용하시는 것이 옳을 것입니다.
그럼 수고하세요.
-- 김훈 님이 쓰신 글:
>> 안녕하세요..
>> 아래 두개의 쿼리는 결과값이 똑같은데요.. 어떤 차이가 있는지 궁금합니다.
>> 어떤 경우에 위의 방법을 쓰는지요.. 위의 방법이 아래의 방법과 차이는
>> left outer join 으로 했다는겁니다.
>>
>> select tawon.servicemode,tawon.grp,tawon.grpnum,tawon.template_align,templateuser.fontcolor,
>> templateuser.fontsize,templateuser.fontstyle from tawon
>> left outer join templateuser on tawon.id = templateuser.id where tawon.id = 'k_hun@hotmail.com'
>>
>> select tawon.servicemode,tawon.grp,tawon.grpnum,tawon.template_align,templateuser.fontcolor,
>> templateuser.fontsize,templateuser.fontstyle from tawon
>> ,templateuser where tawon.id = templateuser.id and tawon.id = 'k_hun@hotmail.com'
|