똑같은 결과가 나오는데 어떤 경우에 쓰는게 더 효율적인가요? 1 4 1,852

by 삼만돌이 [SQL Query] 효율 [2015.09.01 14:30:22]


A테이블 기준으로 동일한 B테이블에서 값을 가져오는 경우입니다.
주로 공통코드같은 경우에 자주 이용하는데요..

아래 2가지 방식으로 해도 동일한 결과값이 나타납니다.
그런데 어떤경우가 더 효율적인지 아직 감이 안잡히네요..

흔히 목록조회라고 하는 다수의 결과가 리턴되는경우와
상세조회라고 하는 단일결과가 리턴되는 경우에..

아래 두 쿼리를 언제 사용해야하나요? 어떤경우든 둘중에 아무거나 쓰면 되는지.. 각 경우에마다 1번방식 2번방식을 사용하는지. 아니면 전혀 다른방법이 있는건지 궁금합니다..

 1)

SELECT A.NAME, B.ID_NAME, C.ID_NAME
            FROM TABLE_A A, TABLE_B B, TABLE_B C
          WHERE A.ID = B.ID(+)
            AND A.KRID = C.ID(+)
 
 

2)       
           
          SELECT A.NAME, (SELECT ID_NAME FROM TABLE_B B WHERE B.ID = A.ID) ID_NAME
                       , (SELECT ID_NAME FROM TABLE_B C WHERE C.ID = A.KRID) ID_NAME
            FROM TABLE_A A
 

by 개발뉴비 [2015.09.01 15:02:29]

TABLE_B를 두번이나 같은컬럼으로 조인해서 같은 데이터를 가져오네요...

한번만 조인하면 될 것 같은데.... 혹시 다른 테이블인데 복붙으로 같은 테이블명으로 질문을 하신건가요?


by 삼만돌이 [2015.09.01 15:47:33]

윽 예제를 잘못섰네요.. ㅎㅎ


by 마농 [2015.09.01 15:06:21]

스칼라서브쿼리(2번)의 경우 메인쿼리의 데이터 건수만큼 서브쿼리가 반복 수행되어 비효율 입니다.
따라서 일반 조인을 사용하는 것이 좋습니다.
다만 스칼라서브쿼리가 유리한 경우도 있습니다.
서브쿼리에 주어지는 메인 컬럼의 값이 종류가 적고 중복값이 많은 경우입니다.
보통 코드성 테이블의 코드명 조회하는 경우가 이에 해당됩니다.
중복값이 많은 경우 중복되는 값에 대해서는 서브쿼리가 한번만 수행되어 캐시된 값을 이용하게 됩니다.
일반적으로는 조인이 유리하며
데이터의 특성을 고려하여 스칼라 서브쿼리를 성능 튜닝에 이용하기도 합니다.


by 삼만돌이 [2015.09.01 15:49:17]

소중한 답변 감사합니다.

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