함수 작성시 한방쿼리와 순차조회 0 8 3,944

by 야신 [PL/SQL] PLSQL SQL [2013.07.18 09:40:25]


PLSQL 로 여러 테이블에서 데이타 검색을 해서 결과값을 가져와야 되는 경우가 생겼습니다.
테이블간 우선순위가 있습니다. A > B > C
A,B,C 테이블에 A01, B01, C01 컬럼이 인덱스를 가지고 있다고 할 때 
두가지 방법으로 처리가능할 것 같은데....

1) SQL 한방으로 처리  :  아래와 같이 조회하게 되면 조건절이 안으로 병합하여 들어가 인덱스를 타게 됨

SELECT name
   INTO v_result
   FROM (
SELECT A01   AS NAME
   FROM A
UNION ALL 
SELECT B01
   FROM B
UNION ALL
 SELECT C01  
   FROM C
)
WHERE NAME = 'XXX'
   AND ROWNUM = 1

2)  절차적으로 처리 : 앞에 조회에 결과값이 나오면 다음에 SQL 을 날리지 않아도 됨
SELECT A01   AS NAME
   INTO v_result
   FROM A
WHERE A01= 'XXX'

IF v_result IS NOT NULL THEN
  RETURN v_result
END IF;

 SELECT B01   AS NAME
   INTO v_result
   FROM B
WHERE B01= 'XXX';

IF v_result IS NOT NULL THEN
  RETURN v_result
END IF;
...


어떤 쪽이 속도면에서 유리할까요?



by DIIIN [2013.07.18 09:53:50]

대부분의 값이 A테이블에 있다면 첫 번째보다는 두 번째가 빨라 보입니다.

그런데 두 번째는 v_result 를 따로 처리하는군요. A 테이블에서 한 번, B 테이블에서 한 번

첫 번째와 동일하게 가려면 if ~ else ~ (if~  를 사용하셔야 될 것 같은데요?

by 야신 [2013.07.18 10:13:15]
예제인데 첫번째에서 결과값이 있으면 끝나기 때문에
별도 처리를 하지 않았습니다.^^

by 부쉬맨 [2013.07.18 10:01:41]
2번ㄴㄴㄴㄴㄴㄴ

by 야신 [2013.07.18 10:11:51]
저도 2번 방식으로 구현하였으나 왠지 SQL파싱빈도, 또 결과값의 cache 때문에 묘하게 1번이 신경쓰여요

by 우리집아찌 [2013.07.18 10:11:30]

전 one query 쪽을 선호하는데요..

by 야신 [2013.07.18 10:16:08]
다른 SQL 에 SQL 문 제공 된다면 1번 처럼 구현해서 써야 되는데
업무적으로 치고 들어올것들이 생길지 몰라 함수로 구현하다 보니 실제적으로는
2번을 쓰게 됐네요. 하지만 1번 방식이 왠지 계속 신경쓰임

by 용근님 [2013.07.18 14:10:23]

업무가 복잡하면 속도보단 업무 파악 및 유지보수 때문이라도 2번으로 갑니다.

게시판성  -> One Query
업무복잡성 -> 최대한 분할 로직

by 야신 [2013.07.18 17:29:09]
대세는 2번인듯 하네요.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입