Background Image
조회 수 6007 추천 수 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가 됩니다.)

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
19 Install Windows 에서 CUBRID 설치하기 file 남재우 2008.11.22 43643
18 Install CUBRID Manager 사용시 로그인에 대하여 1 file admin 2009.04.01 42042
17 Install AutoSet 4.3.2를 이용한 APACHE+PHP+CUBRID 2008 설치 가이드 seongjoon 2009.03.13 38974
16 Install UNIX/LINUX 에서 CUBRID 설치하기 남재우 2008.11.22 37526
15 Install CUBRID 설치 및 매니저 구동하기(CUBRID 2008 R1.x) CUBRID_DEV 2009.07.18 31532
14 Install CUBRID 2008 을 하나의 머신에 여러번 설치하기(multi instance) admin 2008.11.21 31459
13 Install CUBRID기반으로 XE 운영하기 – 설치가이드 file cubebridge 2012.04.13 30931
12 Install APC_Install-tools 구성 및 설치 방법 file Prototype 2009.03.13 30614
11 Install CUBRID 설치 안내 - LINUX 남재우 2011.03.08 30413
10 Install CUBRID 설치 및 매니저 구동하기(CUBRID 2008 R2.0) CUBRID_DEV 2009.08.18 30047
9 Install CUBRID 에 텍스트큐브 설치하기 file inureyes 2009.12.31 29852
8 Install CUBRID Ubuntu Launchpad Installation 방법 file 정만영 2011.07.19 29604
7 Install CUBRID Windows버전 삭제 및 재설치 실패시 강제 삭제하는 방법입니다. admin 2011.07.14 29549
6 Install CUBRID R2.0 ISV(Independent Software Vendor)설치방법 file cubebridge 2009.11.20 27921
5 Install CUBRID2008 R2.1 업그레이드시 serial 관련 문제 해결 방법 남재우 2010.01.28 27348
4 Install CUBRID6.6 이상에서 CUBRID2008 로 데이터베이스 이전 하기 3 남재우 2008.11.21 26445
3 Install LINUX CUBRID 4.0 매니저 설치방법 file 정만영 2011.07.19 23654
2 Install CUBRID 2008 + Textyle 설치 가이드 3 1 Prototype 2009.07.29 18285
1 Install [linux] wget으로 제품 다운로드 시 "wget: unable to resolve host address ‘ftp.cubrid.org’" 해결방 큐브리드_김주현 2021.07.02 2233
Board Pagination Prev 1 Next
/ 1

Contact Cubrid

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