최적의 쿼리 작성

Redshift 입문

Jason Myers

Principal Engineer

컬럼 수 제한하기

  • SELECT * 피하기
  • 결과에 불필요한 컬럼 선택 금지
    • Redshift는 컬럼 지향 저장이므로 컬럼 단위로 데이터가 로드됨
Redshift 입문

DISTKEY와 SORTKEY 사용

다음 절에서 가능하면 사용

  • JOIN
  • WHERE
  • GROUP BY

 

ORDER BY에서는 SORTKEY 순서를 따르기

  • 고도로 최적: sortkey_1, sortkey_2, sortkey_3
  • 비최적: sort_key_1, sort_key_3

분산 쿼리

Redshift 입문

좋은 조건절 작성

  • DISTKEYSORTKEY 사용
  • 조인 테이블과 가깝게 배치
  • 그 안에서 함수 사용은 지양
SELECT receipts.cookie_id, 
       sum(receipts.total)
FROM receipts
JOIN cookies ON receipts.cookie_id = cookies.cookie_id
  -- Keep cookies predicates in the join to push down to nodes holding the records for cookies
 AND cookies.available_on < '2023-11-14'
 AND cookies.end_of_sale IS null
-- Predicates that are not part of the join or on the joined table stay in the WHERE clause
WHERE receipts.order_time > '2023-11-13'
GROUP BY 1 ORDER BY 1;
Redshift 입문

컬럼 순서 일관성 유지

다음 사용 시:

  • GROUP BY
  • ORDER BY

나쁨

GROUP BY col_one, col_two, col_three
ORDER BY col_two, col_three, col_one

좋음

GROUP BY col_two, col_three, col_one
ORDER BY col_two, col_three, col_one
Redshift 입문

하위 쿼리를 현명하게 사용하기

  • 하위 쿼리만 쓰지 말고 적절한 조인 전략 사용
  • 하위 쿼리의 존재만 확인할 때는 조건절에서 EXISTS 사용
    SELECT column_name
    FROM table_name
    WHERE EXISTS
      (SELECT column_name 
       FROM table_name 
       WHERE active is True);
    
  • 하위 쿼리를 재사용한다면 캐시 이점을 위해 CTE 사용
Redshift 입문

실습해 봅시다!

Redshift 입문

Preparing Video For Download...