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
번호 분류 제목 글쓴이 날짜 조회 수
166 기타 트랜잭션과 LOCK 초급과정 정만영 2010.07.01 20760
165 기타 큐브리드10.1 에서 윤초 지원 옵션 사용하기 최광일 2017.09.13 1389
164 기타 콘솔에서 마이그레이션 하기. file 권호일 2015.06.19 13427
163 기타 조인 방법(Join Method) 설명 file 웁쓰 2009.12.31 27989
162 기타 제로보드 XE 사용하기 file admin 2008.11.21 33068
161 기타 자주 발생하는 큐브리드(cubrid) 에러 메시지 정리 admin 2011.07.14 81363
160 기타 자동증가 속성 사용 방법 및 주의 사항 남재우 2010.02.26 35661
159 Windows 윈도우즈 환경에서 배치화일을 이용하여 백업 또는 데이터베이스 정리 수행하기 남재우 2010.03.03 27479
158 기타 오래 걸리는 질의 및 동일 시간에 수행 중인 질의 추출하기 손승일 2009.05.26 20058
157 기타 오라클 개발자를 위한 CUBRID 개발 안내 1 admin 2009.04.01 49817
156 기타 예제로 배우는 CUBRID 스터디 문학청년 2009.12.29 18546
155 기타 에러 메시지(error) 설명 및 조치 가이드 file CUBRID_DEV 2009.07.11 24420
154 기타 알고 보면 쉬운 cubrid lockdb 유틸리티 file 김승훈 2015.12.08 12018
153 기타 시스템 카다로그 2 admin 2008.11.21 22333
» 기타 스칼라 서브쿼리 사용 가이드 웁쓰 2009.12.31 28268
151 기타 서비스 오픈을 위한 CUBRID 구성 가이드 손승일 2009.11.28 23204
150 Linux 복제 따라하기 admin 2008.11.21 29094
149 기타 보안 설정 admin 2008.11.21 22838
148 기타 멀티미디어 데이터 관리를 위한 CUBRID GLO Method 활용 janus 2009.12.11 16191
147 Linux 리소스를 제한(limits.conf) 하여 DB서버를 관리하자 1 주현 2015.12.31 26551
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