Background Image
기타
2009.12.31 19:14

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

조회 수 27308 추천 수 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'

 


 


  1. CUBRID 복제 설계 가이드

  2. CUBRID 사용 포트와 iptables(방화벽) 설정

  3. 자동증가 속성 사용 방법 및 주의 사항

  4. CUBRID 관련 유용한 기술 자료...

  5. Server HA 구성 시 CUBRID 설정과 방법

  6. Vista_IIS_CUBRID_ASP연동

  7. CUBRID2008 R2.1 업그레이드시 serial 관련 문제 해결 방법

  8. CUBRID 데이터베이스와 연동하여 Qt어플리케이션 개발하기 - 2

  9. CUBRID 데이터베이스와 연동하여 Qt어플리케이션 개발하기 - 1

  10. CUBRID인덱스 구성 전략

  11. 조인 방법(Join Method) 설명

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

  13. CUBRID 에 텍스트큐브 설치하기

  14. 예제로 배우는 CUBRID 스터디

  15. 독자적 테이블 사용되는 복제 재구성

  16. SELECT ~ FOR UPDATE 대체 방법

  17. 멀티미디어 데이터 관리를 위한 CUBRID GLO Method 활용

  18. QTADO를 이용하여 CUBRID접속하기

  19. CUBRID 개발 가이드

  20. 서비스 오픈을 위한 CUBRID 구성 가이드

Board Pagination Prev 1 2 3 4 5 6 7 8 9 Next
/ 9

Contact Cubrid

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