Background Image
기타
2009.12.31 19:14

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

조회 수 28268 추천 수 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 Linux CUBRID DB와 Broker 분리방안 정만영 2010.04.28 28411
105 기타 데이터 저장 구조와 테이블 재구성 file 손승일 2010.04.21 37489
104 기타 CUBRID 복제 구성하기 - 단일 서버에 구성 방법 포함 남재우 2010.03.08 30002
103 Windows 윈도우즈 환경에서 배치화일을 이용하여 백업 또는 데이터베이스 정리 수행하기 남재우 2010.03.03 27479
102 Linux CUBRID 복제 설계 가이드 file 정만영 2010.03.03 25138
101 Linux CUBRID 사용 포트와 iptables(방화벽) 설정 정만영 2010.03.01 38341
100 기타 자동증가 속성 사용 방법 및 주의 사항 남재우 2010.02.26 35661
99 기타 CUBRID 관련 유용한 기술 자료... 정병주 2010.02.19 33460
98 기타 Server HA 구성 시 CUBRID 설정과 방법 정만영 2010.02.03 21184
97 ODBC/OLEDB Vista_IIS_CUBRID_ASP연동 janus 2010.01.31 24553
96 Install CUBRID2008 R2.1 업그레이드시 serial 관련 문제 해결 방법 남재우 2010.01.28 27347
95 기타 CUBRID 데이터베이스와 연동하여 Qt어플리케이션 개발하기 - 2 3 김대진 2010.01.27 24541
94 기타 CUBRID 데이터베이스와 연동하여 Qt어플리케이션 개발하기 - 1 김대진 2010.01.14 32877
93 기타 CUBRID인덱스 구성 전략 웁쓰 2009.12.31 22193
92 기타 조인 방법(Join Method) 설명 file 웁쓰 2009.12.31 27989
» 기타 스칼라 서브쿼리 사용 가이드 웁쓰 2009.12.31 28268
90 Install CUBRID 에 텍스트큐브 설치하기 file inureyes 2009.12.31 29852
89 기타 예제로 배우는 CUBRID 스터디 문학청년 2009.12.29 18546
88 기타 독자적 테이블 사용되는 복제 재구성 file 손승일 2009.12.30 24173
87 Java SELECT ~ FOR UPDATE 대체 방법 손승일 2009.12.30 32366
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