튜닝

다중컬럼 조건에 대한 인라인뷰 처리방안

by 박동윤 posted Dec 27, 2016
1. 다중컬럼 조건에 대하여 기존 EXISTS 로 처리하는 방안 외에 인라인뷰로 조인하여 해결하는 방안입니다.
  * CUBRID는 다중컬럼 조건처리를 지원하지 않으며, EXISTS 혹은 인라인 뷰를 통하여 다중컬럼처리를 할 수 있습니다. 
  * EXISTS는 메인쿼리의 true, false를 모두 구하여야 함으로, fetch, data scan 양이 증가합니다.
  * 인라인뷰로 join 시 메인쿼리의 fatch, data scan 양을 최소화 할 수 있습니다.

2. TEST table 스키마
 2-1. 스키마
   CREATE TABLE cub_test1 (code1 VARCHAR(10), code2 VARCHAR(10), code3 VARCHAR(10));
   CREATE TABLE cub_test2 (code1 VARCHAR(10), code2 VARCHAR(10), code3 VARCHAR(10));

 2-2. 데이터
   INSERT INTO cub_test1 VALUES ('1','code2_test','code3_test');
   INSERT INTO cub_test1 VALUES ('2','code2_test','code3_test');
   INSERT INTO cub_test1 VALUES ('3','code2_test','code3_test');
   INSERT INTO cub_test1 VALUES ('4','code2_test','code3_test');
   INSERT INTO cub_test1 VALUES ('5','code2_test','code3_test');
   INSERT INTO cub_test1 VALUES ('6','code2_test','code3_test');
   INSERT INTO cub_test1 VALUES ('7','code2_test','code3_test');

   INSERT INTO cub_test2 VALUES ('1','code2_test','code3_test');
   INSERT INTO cub_test2 VALUES ('2','code2_test','code3_test');
   INSERT INTO cub_test2 VALUES ('3','code2_test','code3_test');
   INSERT INTO cub_test2 VALUES ('4','code2_test','code3_test');
   INSERT INTO cub_test2 VALUES ('5','code2_test','code3_test');
   INSERT INTO cub_test2 VALUES ('6','code2_test','code3_test');
   INSERT INTO cub_test2 VALUES ('7','code2_test','code3_test')
  
3. 유형별 SQL

3-1.ORACLE) 다중 컬럼 처리
 SELECT a.code1, a.code2, a.code3
 FROM cub_test1 a
 WHERE (a.code1, a.code2) IN (SELECT b.code1,b.code2
                                         FROM cub_test2 b
                                         WHERE b.code1 = '1'
                                         AND b.code3 = 'code3_test'
                                        )





 

3-2.CUBRID_EXISTS 다중 컬럼 처리
 SELECT a.code1, a.code2, a.code3
 FROM cub_test1 a
 WHERE EXISTS (SELECT b.code1,b.code2
                       FROM cub_test2 b
                       WHERE b.code1 = '1'
                       AND b.code3 = 'code3_test'
                       AND a.code1 = b.code1
                       AND a.code2 = b.code2
                      )

3-3.CUBRID_인라인뷰 다중컬럼 처리
 SELECT a.code1, a.code2, a.code3
 FROM cub_test1 a, (SELECT DISTINCT b.code1,b.code2
                           FROM cub_test2 b
                           WHERE b.code1 = '1'
                           AND b.code3 = 'code3_test'
                           ) c
 WHERE a.code1 = c.code1
 AND a.code2 = c.code2 
          




Articles

1 2 3 4 5 6 7 8 9