같은 테이블을 여러번 조회할때 최선의 방법...? 0 8 9,627

by 디케이 [2013.04.19 09:10:15]


보통 코드값에 대한 코드명을 코드테이블에 관리합니다.

코드테이블에는 그룹코드, 코드, 한글명, 영문명, 사용여부, 순서, ... 등 컬럼에, 데이터는 3만건정도 입니다.

조회테이블에 코드화된 컬럼이 10개 이상이 있는데 모두 코드명을 보여줘야되는데
어떻게 조회하는게 가장 좋은지 도움을 받고자 합니다.

1.스칼라 서브쿼리
   예) SELECT (SELECT 코드명 FROM 코드테이블 WHERE 그룹코드='연료타입' AND 사용여부='Y') --연료타입
    , .... --10건모두 나열
  FROM 조회테이블
2.JOIN-1
   예) SELECT B.코드명 --연료타입
    ,  C.코드명 --엔진타입
    , ....
  FROM 조회테이블 A, 코드테이블 B, 코드테이블 C, ...
    WHERE A.연료코드=B.코드 (+) AND B.그룹코드(+)='연료타입' AND B.사용여부(+)='Y'
  AND A.엔진타입=C.코드 (+) AND C.그룹코드(+)='엔진타입' AND C.사용여부(+)='Y'
  ...............

3. JOIN-2
    예) SELECT B.코드명 --연료타입
    , ....
  FROM 조회테이블 A
   ,  (SELECT * FROM 코드테이블 WHERE  그룹코드='연료타입' AND 사용여부='Y')  B --연료타입
  ,   ..
    WHERE A.연료코드=B.코드 (+)   ...............
   ...........


현재 데이터가 몇건 없어서 차이를 모르겠어요.
시스템에는 3-번으로 적용했는데 혹시 더 나은 다른방법이 있나요?

by 우리집아찌 [2013.04.19 09:13:43]

펑션으로 만들어서 씁니다..  ^^*

by 디케이 [2013.04.19 09:16:54]
답변 감사합니다. 

펑션으로 처리하면 쿼리문장은 깔금한데. 그럼 펑션으로 하는게 더 나은가요..?

by 아발란체 [2013.04.19 09:26:04]

코드 테이블은, 스칼라로  같은 코드값 요청에 대해 캐쉬 처리하는게 좋지않을까용.


by 마농 [2013.04.19 09:26:40]

딱히 더 나은건 없습니다.
각각의 장단점을 비교해보고 자신이 원하시는걸 선택하셔야 합니다.

4. 개발 편의성을 원한다면 사용자 함수를 만들어 쓰는 방법이 있겠구요.
   단 성능은 좀 떨어질 수 있구요.
1. 스칼라서브쿼리를 사용하여 성능 향상을 꽤할 수 있구요.
   서브쿼리에 같은 조건이 반복적으로 주어지게 되면 첫번째 결과값을 재사용하지요.
   항상 좋은건 아니죠. 코드성의 경우엔 재사용율이 좋아 성능이 향상됩니다.
   조인으로 풀 경우 다양한 실행계획 수립이 가능하지만
   이경우엔 실행계획이 한쪽 방향으로만 고정이 되지요.
2,3 은 어차피 실행계획은 동일할 듯 합니다.
   Query Transformation(쿼리변환)에 의해 View Merging 이 일어나게 됨
   너무 많은 조인이 가해져야 한다면 From/Where절이 길어지고 쿼리가독성이 떨어지므로
   저는 1번을 선호합니다.(코드명 가져오는 경우에만)


by 우리집아찌 [2013.04.19 09:26:52]

저는 쿼리가 지져분하는것 싫어해서 펑션으로 만들어쓰는편입니다.
아.. 근데 평션쓸때 스칼라서브쿼리처럼 돌리면 또 지져분해지네요 ㅡㅡ;

by 디케이 [2013.04.19 09:35:59]

우리집아찌님, 아발란체님, 마농님 감사합니다.

종합해보니 가독성을 따지면 사용자함수, 성능위주로 가면 스칼라 서브쿼리로 풀어어야 되네요..

앞으로 쿼리작성할 때 적용해야 겠네요. 위내용은 1번으로 바꿔야겠어요..ㅎㅎ

마농님은 답변채택 많이 받으시니까 처음 댓글 달아주신 우리집아찌님 채택드립니다.^^

수고하세요.

by 우리집아찌 [2013.04.19 09:37:46]
감사합니다.
복받으실거에요... ^^*

by 부쉬맨 [2013.04.19 09:38:49]
http://wiki.gurubee.net/pages/viewpage.action?pageId=26738860
전에 한거도있지만
개발자 편의상 쓰면되긴하겠지만
가독성이냐 성능이냐 이것이문제로다...

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