보통 코드값에 대한 코드명을 코드테이블에 관리합니다.
코드테이블에는 그룹코드, 코드, 한글명, 영문명, 사용여부, 순서, ... 등 컬럼에, 데이터는 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-번으로 적용했는데 혹시 더 나은 다른방법이 있나요?
딱히 더 나은건 없습니다.
각각의 장단점을 비교해보고 자신이 원하시는걸 선택하셔야 합니다.
4. 개발 편의성을 원한다면 사용자 함수를 만들어 쓰는 방법이 있겠구요.
단 성능은 좀 떨어질 수 있구요.
1. 스칼라서브쿼리를 사용하여 성능 향상을 꽤할 수 있구요.
서브쿼리에 같은 조건이 반복적으로 주어지게 되면 첫번째 결과값을 재사용하지요.
항상 좋은건 아니죠. 코드성의 경우엔 재사용율이 좋아 성능이 향상됩니다.
조인으로 풀 경우 다양한 실행계획 수립이 가능하지만
이경우엔 실행계획이 한쪽 방향으로만 고정이 되지요.
2,3 은 어차피 실행계획은 동일할 듯 합니다.
Query Transformation(쿼리변환)에 의해 View Merging 이 일어나게 됨
너무 많은 조인이 가해져야 한다면 From/Where절이 길어지고 쿼리가독성이 떨어지므로
저는 1번을 선호합니다.(코드명 가져오는 경우에만)