innerjoin과 subquery의 차이점! 0 4 1,173

by 비디는껌 [2012.06.01 17:15:52]


select p.prod_id 상품코드, p.prod_name 상품명 , l.lprod_nm 분류명 from prod p inner join lprod l
  on (p.prod_lgu=l.lprod_gu);


select prod_id 상품코드, prod_name 상품명,
    (select lprod_nm from lprod where prod_lgu = lprod_gu) 분류명
from prod;

prod의 index는 pk_prod_id
lprod의 index는 pk_lprod입니다

실행계획을 보면 위에 쿼리는 중첩루프를 타서 아래꺼보단 비효율적이고

아래쿼리는 중첩루프를 안타는데요

왜그런지 이유 알수있을까요!
by 손님 [2012.06.01 17:33:08]
안타는것이 아니라 안보이는거~.

by 비디는껌 [2012.06.01 17:40:25]

실행계획에서는 중첩루프 안타던데요!

by 손님 [2012.06.01 17:48:57]

스칼라서브 쿼리 원리에 대해 공부하시면 됩니다


by 웅 [2012.06.01 21:58:01]

안타는게 아니고 안보이는 것이고요.
하지만 스칼라서브쿼리는 경우에 따라 deterministic가 적용된 함수처럼 동작하여 유리한 경우도 있습니다.

가장 다른 점은 결과 row수가 달라질 수 있습니다.
위 inner 조인은 lprod 조인에 의해 결과가 제한될 수 있지만
아래 스칼라는 prod결과건수에 스칼라서브쿼리가 영향을 주지않기 때문입니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입