메뉴 건너뛰기

tnt_db

Oracle JOIN 과 UNION 의 선후관계

운영자 2002.09.17 20:21 조회 수 : 4510 추천:18

문제 ]

  어떤 테이블의 필드 하나가 조건에 따라 두가지의 테이블을 물고있습니다.
  만약 필드값이 "9"로 시작하면 A테이블을
                       "G"로 시작하면 B테이블을
  SQL문장을 어떻게 구성해야 하나요?

  현재 사용하는 SQL문은 다음과 같습니다.

  SELECT A FROM 문제의테이믈, ( SELECT * FROM A테이블 UNION SELECT * FROM B테이블 ) C
  WHERE 문제의테이블.특정필드=C.특정필드(+)

  하지만 속도가 너무 느려요 좋은 해결방법은 없는지
  전문가의 조언을 부탁드립니다.
--

답변 :
글쎄요..정확한 상황이 어떤것인지 파악하기가 어렵습니다.
UNIION ALL 을 안쓰고 UNION 을 쓰신걸로 봐서는 A,B테이블이 구조가 같고
같은 DATA값을 가지고 있을 수 있다는 얘긴데..제가 예측한 상황이 맞다면
차라리 먼저 한테이블씩 JOIN을 건후 나중에 UNION 하는것이 오히려
낫겠습니다.
단, JOIN이 걸리는 컬럼이 INDEX 사용가능하다면 말입니다.
그러니까 '9'로 시작하는 것만 조건절로 걸러서 A테이블과 조인을 걸고,
다시 'G'로 시작하는 것만을 조건절로 걸러서 B테이블과  조인을 건후
둘을 UNION 하는것이 좋을거 같습니다.
그렇게 하면 조인이 일어날때 A,B에 있는 INDEX를 이용할 수 있어서
DATA 가 많을 수록 속도에는 효과가 있을 듯 하군요..
그럼...
P.S. 만약 아니라면 상황과 조건을 좀더 소상히 알려 주세요..
        함께 고민하면 방법이 있을지도 모르니까...수고하세요..
위로