본문 바로가기
IBSHEET

성능 좋은 SQL 쿼리 작성법(Subquery)

by 엘리후 2023. 6. 18.

1. Flattened(Unnest subqueries)

Join으로 변환후, Join으로서 처리

 - 직접 Join 사용 경우와 차이 발생 가능(조인순서, 연산 방법 등의 차이 발생)

 

2. 언제 Subquery를 사용할까?

① Semi Join

한쪽 테이블만 SELECT 결과 집합으로 요구

다른 쪽 테이블은 데이터를 체크하는 선택(selection)연산만 수행

 - Subquery로 작성해서 최적화 작업

ex) SELECT DISTINCT ID FROM DATA A INNER JOIN DAT B ON A.ID = B.ID

 => SELECT ID FROM DATA  A WHERE EXISTS(SELECT * FROM DAT B WHERE B.ID = A.ID)

 

② TOP 절 등을 이용 결과 집합이 일부로 제한되는 경우

 

③ 데이터 가공(선 처리)후 Join이나 기타 연산 수행 시

 

④ Subquery 고유 문법이나 기능이 필요한 경우

 

3. 파생테이블, CTE, APPLY 활용

성능 좋은 고급 쿼리 적용 예

① 중복 I/O 제거 -"같은 데이터는 2번 이상 중복해서 읽지 않는다"

  ⒜ 파생테이블/CTE + JOIN으로 변경

  ⒝ 기준 결과 집합 선 처리 후 결합(FROM 안에서 조인후 SELECT 절에서 가공한다.)

  ⒞ 행 복제

 

② 연산 순서 조정 - 더 나은 순서로 연산 처리

결합(Join, Subquery)전 Grop 먼저

ex) (거래 데이터 * 코드 테이블) => 집계 VS (거래 데이터 => 집계) * 코드 테이블

 

4. CASE 내부 Subquery 주의

CASE문 안에 SELECT 서브 쿼리 사용시 WHEN 절의 개수만큼 테이블에 반복해서 엑세스가 일어남 SELECT 안에서 CASE 문 사용시 테이블을 한번만 읽는다.

ex) SELECT ID, CASE(SELECT ID FROM DATA... => SELECT ID, (SELECT CASE ID WHEN 'Germany'...

댓글