쿼리 최적화

Snowflake로 시작하는 데이터 모델링

Nuno Rocha

Director of Engineering

쿼리 실행 순서

쿼리 실행 순서, 전체 쿼리

Snowflake로 시작하는 데이터 모델링

쿼리 실행 순서 (1)

쿼리 실행 순서; FROM

Snowflake로 시작하는 데이터 모델링

쿼리 실행 순서 (2)

쿼리 실행 순서; JOIN

Snowflake로 시작하는 데이터 모델링

쿼리 실행 순서 (3)

쿼리 실행 순서; WHERE

Snowflake로 시작하는 데이터 모델링

쿼리 실행 순서 (4)

쿼리 실행 순서; AGGREGATIONS

Snowflake로 시작하는 데이터 모델링

쿼리 실행 순서 (5)

쿼리 실행 순서; HAVING

Snowflake로 시작하는 데이터 모델링

쿼리 실행 순서 (6)

쿼리 실행 순서; SORT

Snowflake로 시작하는 데이터 모델링

쿼리 실행 순서 (7)

쿼리 실행 순서; LIMIT

Snowflake로 시작하는 데이터 모델링

쿼리 실행 순서 (8)

최종 쿼리 실행 순서

  • 모범 사례:
    • SELECT * 사용 지양; 필요한 열만 지정
    • 데이터량 축소를 위해 LIMIT 적용
    • WHERE를 초기에 사용해 행 필터링 및 메모리 절약
    • 축소된 데이터에 집계와 함께 GROUP BY 사용
Snowflake로 시작하는 데이터 모델링

서브쿼리

서브쿼리 표현

Snowflake로 시작하는 데이터 모델링

서브쿼리

호텔 체인 로열티 데이터 모델

Snowflake로 시작하는 데이터 모델링

서브쿼리

  • 로열티 포인트가 1000 초과인 모든 고객 조회
SELECT *
FROM guests
WHERE id IN (SELECT guest_id 
                  FROM loyalty_program 
                  WHERE loyalty_points > 1000);
Snowflake로 시작하는 데이터 모델링

공통 테이블식 (CTE)

CTE

Snowflake로 시작하는 데이터 모델링

공통 테이블식 (CTE)

  • 최신 예약 내역 조회
WITH latest_booking AS (
    SELECT guest_id, 
           MAX(checkout_date) AS latest_checkout
    FROM booking_details
    GROUP BY guest_id
)
SELECT bd.*, 
       bd.checkout_date AS latest_booking_date
FROM booking_details bd
    JOIN latest_booking lb 
        ON bd.guest_id = lb.guest_id 
        AND bd.checkout_date = lb.latest_checkout;
Snowflake로 시작하는 데이터 모델링

CTE와 서브쿼리

CTE

  • 장점

    • 복잡한 쿼리의 가독성 향상
    • 동일 쿼리 내 재사용 가능
    • SQL 구성 개선
  • 단점

    • 성능 오버헤드 가능
    • 단일 쿼리 범위로 제한

서브쿼리

  • 장점

    • 단일 용도에 단순·직관적
    • SQL문의 다양한 위치에서 유연하게 사용
  • 단점

    • 복잡해지면 가독성 저하
    • 중첩 시 성능 저하 가능
Snowflake로 시작하는 데이터 모델링

쿼리 실행 시간 시각화

쿼리 프로파일 페이지

Snowflake로 시작하는 데이터 모델링

용어 및 기능 개요

  • 쿼리 최적화: 효율과 성능을 극대화하도록 쿼리를 조정
  • 서브쿼리: 특정 데이터를 좁혀 보기 위한 메인 쿼리 내부의 작은 쿼리
  • 공통 테이블식(CTE): 쿼리 중 생성되는 임시 가상 테이블
  • WITH .. AS: CTE를 정의하는 SQL 구문
  • LIMIT: 결과 행 수를 제한하는 절
  • HAVING: SUM, MAX 등 집계 결과를 필터링하는 절
  • WHERE: 그룹화 전 행을 필터링해 효율 향상
Snowflake로 시작하는 데이터 모델링

CTE와 서브쿼리 예시 템플릿

  • 서브쿼리
SELECT *
FROM table_name
WHERE column_name IN (SELECT column_name 
                  FROM table_name
                  WHERE column_name condition value);
  • CTE
WITH latest_booking_dates AS (
    SELECT column_name
    FROM table_name)
SELECT *
FROM table_name a
    JOIN other_table_name b 
    ON a.key_column = b.key_column;
Snowflake로 시작하는 데이터 모델링

Ayo berlatih!

Snowflake로 시작하는 데이터 모델링

Preparing Video For Download...