[SQLD 퀴즈] 쿼리 효율성

다음 중 아래 두 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에서 축적된 데이터를 통합 관리 

 

 

아래는 댓글에 달린 사람들의 설명인데 틀린 설명이 있을 수도 있습니다.

 

① 수출실적 테이블의 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