Background Image
기타
2009.12.31 19:14

스칼라 서브쿼리 사용 가이드

조회 수 28275 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

스칼라 서브쿼리 사용 가이드

2009-12-23 컨설팅팀 , CUBRID

적용 대상: CUBRID

적용 환경

본 문서는 아래와 같은 환경에서 테스트 되었다.

CUBRID R1.0 이상


 

스칼라 서브쿼리 개요

Select List절에 사용한 한 개 레코드 로부터 한 개 컬럼 값만을 반환하는 Subquery를 말한다.

적용 기준

·         Select List Scalar Subquery를 수행할 결과집합이 대량이 아닌 경우

·         코드성 테이블의 조인이 많아 실행계획이 복잡해져 제어가 어려운 경우

·         코드성 테이블에서 명칭만 가져오는 경우 (, 코드에서 명칭만 가져오더라도 결과 집합이 대량이면 스칼라 서브쿼리가 불리할 수 있으므로 대량인 경우 조인을 사용할 것)

·         한 개의 테이블에서 복수 개의 컬럼을 가져오는 경우 스칼라 서브쿼리(두개의 컬럼을 ||로 묶어서 한 개의 컬럼을 리턴)를 사용하지 말고 조인을 사용하도록 함

주의 사항

아래 사용 예를 기술 하였으며 소량의 데이터인 경우는 Select List Scalar Subquery > Nested Loop Join > User Function (Java Stored Function ) 순으로 Select List Scalar Subquery 가 제일 효율적이므로 반드시 명칭을 가져오는 경우와 같은 단순한 곳에 사용해야 성능을 보장할 수 있음. 

Case Study

사례1 . 코드성 테이블의 명칭만 가져 오는 경우

SELECT a.name

, a.content

, ( SELECT code_nm FROM code_t code WHERE code.codeid = a.bbsid ) bbs_nm

FROM BBS

WHERE bbsid = 1

사례2 . 조인에 참여 하는 테이블이 많아 실행 계획 제어가 어려운 경우

또는 코드성 테이블에서 명칭만을 가져오기 위해 메인집합과 조인하는 경우, 조인해야될 테이블이 많고 또 쿼리가 복잡할수록 원래 의도했던 실행계획으로 풀리지 않는 경우 Select List Scalar Subquery를 활용하여 실행계획을 단순화 시키고자 할 때 사용 한다.

SELECT col1, col2,

       ( SELECT cd_nm FROM code WHERE cd = tab1.cd )

FROM TAB1, TAB2, TAB3

사례3 . 단순히 count, sum등의 간단한 집계 작업인 경우

SELECT

       ( SELECT count(*) FROM sum WHERE sum.cd = tab.cd )

FROM TAB

사례4 . 조인과 group by가 같이 있는경우

아래 SQL은 어떤것을 사용하든지 접근하는 PAGE 수는 동일하나, 인별로 제안건수가 10만건씩이라고 가정하면

1 설명 - 사원10명의 데이터를 읽게 되면  총 100만건의 조인된 집합이 생성된후 group by를 통해서 count를 실행하게됨

예2  설명 - 스칼라 서브쿼리를 사용한 경우 예1)과 같은 조인연산이 필요없고 조인된 집합을 가져가는 부하가 없어지게 된다. 이러한 경우도 Scalar Subquery가 유리한 경우이다. 조인을 한 다음 group by 하는것을 필요한 데이터를 group by로 읽은후 조인함으로써  조인 횟수를 줄이도록 튜닝하는 경우와 비슷하다고 생각하면 된다.


조인을 한다음에 group by를 하는경우

SELECT a.사번, a.성명, a.주민번호, a.자택전화번호, a.EMAIL, COUNT(*)

FROM 사원 a, 제안 b

WHERE a.현소속조직 = 'D1007'

AND   b.제안출처구분 = '사원'

AND   b.제안출처 = a.사번

GROUP BY 사번, 성명, 주민번호, 자택전화번호, EMAIL

별도의 조인없이 원하는 count만을 구하는 경우

 

SELECT 사번, 성명, 주민번호, 자택전화번호, EMAIL,

(SELECT COUNT(*)

FROM 제안 b

WHERE b.제안출처구분 = '사원'

AND   b.제안출처 = a.사번

) 제안횟수

FROM 사원 a

WHERE 현소속조직 = 'D1007'

 


 


List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
106 Java CUBRID Collection Data Type 사용하기 - JDBC 손승일 2009.08.15 24915
105 Java CUBRID JDBC에서 유니코드 사용하기 1 손승일 2009.08.15 27435
104 기타 CUBRID 32bit VS 64bit janus 2009.08.15 17483
103 기타 CUBRID 2008 1.x 에서 CUBRID 2.0 64bit로 Migration 3 janus 2009.08.15 15860
102 기타 CUBRID 2008 R2.0 추가 및 변경 기능 소개 janus 2009.08.15 20663
101 Windows CUBRID2008 R2.0 Tutorial (Windows) cubebridge 2009.08.17 27340
100 Windows CUBRID2008R2.0 Windows BACKUP 자동화 설정하기 정만영 2009.08.17 27942
99 Linux CUBRID Tutorial (Unix/Linux) 정만영 2009.08.17 27887
98 Linux CUBRID2008R1.x to 2.0 마이그레이션 가이드 (32bit 기준) 정만영 2009.08.17 27205
97 기타 CUBRID2008_보안설정[R2.0] seongjoon 2009.08.17 16272
96 기타 CUBRID Manager login 안내 seongjoon 2009.08.17 16201
95 기타 CUBRID 주요 명령 요약 정리 정만영 2009.08.17 17187
94 기타 DB의 스키마와 데이터를 파일로 내려받기 seongjoon 2009.08.17 20009
93 Install CUBRID 설치 및 매니저 구동하기(CUBRID 2008 R2.0) CUBRID_DEV 2009.08.18 30054
92 기타 CUBRID 2008 + XE 설치 가이드 [R2.0] Prototype 2009.08.27 16573
91 기타 CUBRID2008 R2.0 실행계획 분석하기 file cubebridge 2009.08.27 21917
90 기타 CUBRID HA introduction janus 2009.08.28 20863
89 Windows windows 환경에서 여러버젼의 CUBRID 설치하여 사용하기 4 남재우 2009.09.16 26192
88 Java QuantumDB Eclipse Plugin을 사용하여 CUBRID연동하기 2 cubebridge 2009.10.06 28922
87 Java CUBRID Java Stored Procedure와 DB Server Memory 관계 file 손승일 2009.10.31 40190
Board Pagination Prev 1 2 3 4 5 6 7 8 9 Next
/ 9

Contact Cubrid

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