다음 중 아래 두 SQL에 대한 설명으로 가장 적절한 것은?(단, 국가는 100건, 수출실적은 100만 건. 국가 테이블 PK는 국가코드이다.)
---------------------------------아 래-------------------------------------
가. SELECT DISTINCT 국가명
FROM 국가 x, 수출실적 y
WHERE x.국가코드= y.국가코드
AND y.수출년월 BETWEEN '200001' AND '201012';
나. SELECT 국가명
FROM 국가 x
WHERE EXISTS (SELECT 1
FROM 수출실적 y
WHERE y.국가코드= x.국가코드
AND y.수출년월 BETWEEN '200001' AND '201012');
--------------------------------------------------------------------------------------------
① ‘가’ SQL은 부분범위 처리가 가능하다.
② ‘나’ SQL이 더 효율적이다.
③ OLTP 환경이냐, DW 환경이냐에 따라 두 SQL의 효율성이 다르다.
④ 두 SQL의 결과가 다르므로 효율성을 판단하는 것은 의미가 없다.
[출처] http://www.dbguide.net/da.db?cmd=snb13_view&boardGroupUid=6&boardConfigUid=81&boardUid=153168
[참고]
* OLTP(Online Realtime Transaction Processing)
- 트랜잭션의 효율적인 처리와 완전한 복구를 처리할 수 있도록 해주는 시스템
- 데이터의 조회 및 입력, 수정, 삭제 등의 용도로 사용되는 데이터베이스 시스템 유형
* OLAP(Online Analytival Processing)
- 온라인 분석 처리를 위한 용도로 사용되는 시스템 - 데이터의 활용 가능성을 보여줌 - 이 데이터를 통한 의사결정의 중요성이 강조됨
* DataWareHouse - 데이터웨어하우스 - 데이터가 보관되는 창고 - OTLP에서 축적된 데이터를 통합 관리
[출처] OLTP, OLAP, DataWareHouse 정리|작성자 시험모드
|
아래는 댓글에 달린 사람들의 설명인데 틀린 설명이 있을 수도 있습니다.
① 수출실적 테이블의 between조건이 10년치 데이터이기 때문에 총 100만건중 대부분을 차지할 것이다. 그리고 Distinct조건이 있기 때문에 Sort연산이 수행되고 전체범위로 처리가 된다.
① 수출실적과의 조인으로 수출실적만큼 부풀려진 상태에서 국가만 distinct를 하게 되는 상황이므로 최악상황, sort불가피 부분처리 불가
①은 DISTINCT 키워드로 인해 SORT 연산이 일어나게 된다. 따라서 부분 범위 처리가 불가능
---------------------------------------------------------------------------------------------
② EXISTS 키워드는 부분 범위 처리를 가능하게 해 더 효율적인 SQL이라고 볼 수 있다.
② 적은수의 국가명이 서브쿼리 절에 의한 검증을 통해 추출되어 신속히 원하는 결과를 얻을 수 있다
---------------------------------------------------------------------------------------------
③ OLTP, DW환경에 관계없이 '나'가 더 효율적이다. 서브쿼리가 Filter 될 경우 캐싱효과가 있기 때문이고 또한 수출실적 테이블이 국가코드+수출년월 로 되어 있을경우 최적의 효과를 낼 수 있다.
③은 이 SQL들을 OLTP, DW에 따라 효율적이다 비효율적이다 라고 판단할 수는 없다.
---------------------------------------------------------------------------------------------
④ 두 SQL의 결과는 같다
④는 두 SQL의 결과가 같다. 따라서 효율성을 따지는 것은 의미가 있다.
④ 두 테이블 조인이 이퀴조인으로 수출실적에 있는 국가명이 기간조건으로 걸러지므로 결과 동일함
* 정답 및 해설 *
정답 : ②
두 SQL의 결과는 동일하며, OLTP 환경이냐 DW 환경이냐를 불문하고 두 번째 SQL이 더 효율적이다.
[출처] http://www.dbguide.net/da.db?cmd=snb9_4_view&boardUid=153235&boardConfigUid=81