Background Image
기타
2009.12.31 19:14

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

조회 수 28274 추천 수 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 기타 데이터베이스 생성하기 file 남재우 2011.03.07 29096
105 Linux 복제 따라하기 admin 2008.11.21 29095
104 Java QuantumDB Eclipse Plugin을 사용하여 CUBRID연동하기 2 cubebridge 2009.10.06 28921
103 튜닝 [질의튜닝]order by desc가 인덱스 타게 하려면 admin 2011.07.14 28472
102 Linux CUBRID DB와 Broker 분리방안 정만영 2010.04.28 28412
» 기타 스칼라 서브쿼리 사용 가이드 웁쓰 2009.12.31 28274
100 기타 조인 방법(Join Method) 설명 file 웁쓰 2009.12.31 27994
99 Windows CUBRID2008R2.0 Windows BACKUP 자동화 설정하기 정만영 2009.08.17 27942
98 Install CUBRID R2.0 ISV(Independent Software Vendor)설치방법 file cubebridge 2009.11.20 27921
97 Linux CUBRID Tutorial (Unix/Linux) 정만영 2009.08.17 27885
96 Java JavaSP SampleCode(Pivot기능) cubebridge 2009.07.28 27553
95 Windows 윈도우즈 환경에서 배치화일을 이용하여 백업 또는 데이터베이스 정리 수행하기 남재우 2010.03.03 27485
94 Java CUBRID JDBC에서 유니코드 사용하기 1 손승일 2009.08.15 27434
93 Install CUBRID2008 R2.1 업그레이드시 serial 관련 문제 해결 방법 남재우 2010.01.28 27348
92 Windows CUBRID2008 R2.0 Tutorial (Windows) cubebridge 2009.08.17 27340
91 Windows eclipse에서 python 및 CUBRID broker_log_top 사용하기 cubebridge 2009.07.28 27272
90 Linux CUBRID2008R1.x to 2.0 마이그레이션 가이드 (32bit 기준) 정만영 2009.08.17 27205
89 ODBC/OLEDB VB에서 CUBRID ODBC/OLEDB 사용하는 방법 및 샘플코드. file seongjoon 2012.06.30 26926
88 Linux 리소스를 제한(limits.conf) 하여 DB서버를 관리하자 1 주현 2015.12.31 26609
87 기타 csql(SQL 실행기) 사용법 1 admin 2008.11.21 26557
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