조회 수 7940 추천 수 0 댓글 2
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
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 
          



  • ?
    박세훈 2016.12.28 00:11

    일반적으로 IN 오퍼레이션 안쪽에 SUB QUERY가 데이터가 적을 경우가 많지만,

    SUB QUERY의 데이터가 MAIN QUERY보다 많을 경우에는 EXISTS 사용이 효율적입니다.

    테스트 스키마로 볼때 데이터 양이 cub_test1 >  cub_test2 경우 JOIN 방법을 

    cub_test1 <  cub_test2 경우 'exists' 오퍼레이션을 사용하면 효율적입니다. 

  • ?
    오명환 2016.12.28 18:03
    박세훈차장이 올린 댓글은 일반적인 내용인데, 좀 더 고려할 부분이 있어, 추가 댓글을 올립니다.
    EXISTS는 오른쪽의 필드에 대해 한건씩 보고, 있는지를 확인하기때문에 오른쪽 테이블(cub_test1)을 full scan하는 형태입니다.
    그래서, 왼쪽 테이블(cub_test2)보다 작다고 무조건 좋은 것은 아니고, full scan했을때 문제 없을 정도의 결과 set 필요합니다. (즉, filter 조건으로 fullscan하는 데이타를 줄여주어야 합니다.)
    JOIN를 사용할 경우에는 sub-query의 데이타를 얼마나 줄이느냐가 관건입니다. 만약, where 조건이 없을 경우에는 응답속도에 문제가 발생합니다.
    (NL-JOIN할때, sub-query의 결과가 outer가 되고, cub_test1이 index를 이용해서 inner가 됩니다.)

  1. CUBRID Windows 설치 또는 재설치 후 큐브리드 서비스 문제 해결 가이드

    Date2024.11.15 CategoryWindows By정만영 Views1623
    Read More
  2. [linux] wget으로 제품 다운로드 시 "wget: unable to resolve host address ‘ftp.cubrid.org’" 해결방

    Date2021.07.02 CategoryInstall By큐브리드_김주현 Views5927
    Read More
  3. [10.2 path] - 생성된 view구문을 'show create view' 수행 시 정상적으로 출력되지 않던 이슈 patch

    Date2020.11.09 Category기타 By큐브리드_김주현 Views3404
    Read More
  4. ERwin을 이용한 CUBRID 포워드 엔지니어링

    Date2020.07.14 Category기타 By민순 Views5191
    Read More
  5. ERwin을 이용한 CUBRID 리버스 엔지니어링

    Date2020.07.13 Category기타 By민순 Views6446
    Read More
  6. <주의> 생성한 DB볼륨을 절대! 삭제하지 말자

    Date2019.09.30 CategoryLinux By큐브리드_김주현 Views3626
    Read More
  7. 큐브리드10.1 에서 윤초 지원 옵션 사용하기

    Date2017.09.13 Category기타 By최광일 Views3909
    Read More
  8. 따라하면 쉬운 compactdb 사용법

    Date2017.07.01 Category기타 By허서진 Views5133
    Read More
  9. 리눅스에서 top 명령어를 통한 CPU 점유율 확인 및 측정하기

    Date2017.06.02 CategoryLinux By정훈 Views92420
    Read More
  10. JDBC를 사용한 다중화 구성 SELECT Query 부하 분산 가이드

    Date2017.03.30 CategoryJava By윤준수 Views6290
    Read More
  11. 다중컬럼 조건에 대한 인라인뷰 처리방안

    Date2016.12.27 Category튜닝 By박동윤 Views7940
    Read More
  12. tomcat8.0(DBCP2)과 CUBRID 연동하기

    Date2016.07.01 CategoryJava By손승일 Views18072
    Read More
  13. LIMIT절을 사용하여 SQL문을 간결하게 작성하고, 부분범위 처리를 유도하자.

    Date2016.06.29 Category튜닝 By권호일 Views17761
    Read More
  14. CUBRID에서 Java AddBatch 사용

    Date2016.06.28 CategoryJava By엄기호 Views10591
    Read More
  15. PyCharm을 이용한 CUBRID, Django 연동 가이드

    Date2016.04.11 Category기타 By진우진 Views10521
    Read More
  16. CSQL 인터프리터 사용방법

    Date2016.03.03 Category기타 By정만영 Views20741
    Read More
  17. 데이터 확인에 정규표현식을 사용 해 보자.

    Date2016.03.01 Category기타 By성진 Views15576
    Read More
  18. 리소스를 제한(limits.conf) 하여 DB서버를 관리하자

    Date2015.12.31 CategoryLinux By주현 Views29106
    Read More
  19. CUBRID Migration Toolkit을 이용한 단계별 마이그레이션 진행 방법

    Date2015.12.15 Category기타 By진우진 Views12200
    Read More
  20. 알고 보면 쉬운 cubrid lockdb 유틸리티

    Date2015.12.08 Category기타 By김승훈 Views15162
    Read More
Board Pagination Prev 1 2 3 4 5 6 7 8 9 Next
/ 9

Contact Cubrid

영업문의 070-4077-2112 / 기술문의 070-4077-2148 / 대표전화 070-4077-2110 / Email. contact_at_cubrid.com
Contact Sales

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

나눔고딕 사이트로 가기

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5