최적화

최적화

Polars의 lazy API를 쓰면 Polars가 쿼리에 여러 가지 최적화를 자동으로 적용합니다. 어떤 최적화는 쿼리를 실행하기 전에 미리 결정되고, 어떤 것은 실제 데이터가 흘러들어오는 순간(just in time)에 결정되죠. 아래 표는 Polars가 수행하는 최적화의 전체 목록은 아니지만, 각각이 무엇을 하는지 그리고 얼마나 자주 실행되는지 한눈에 보여줍니다.

출처: 공식문서

최적화 설명 실행 횟수
Predicate pushdown 필터를 가능한 한 빨리, 스캔 레벨에서 적용한다. 1회
Projection pushdown 스캔 레벨에서 필요한 컬럼만 선택한다. 1회
Slice pushdown 스캔 레벨에서 필요한 슬라이스만 불러온다. 슬라이스된 결과를 구체화(materialize)하지 않는다. (예: join.head(10)) 1회
Common subplan elimination 쿼리 플랜의 여러 하위 트리에서 사용되는 서브트리/파일 스캔을 캐시한다. 1회
Simplify expressions 상수 폴딩(constant folding)이나 비싼 연산을 더 빠른 대안으로 교체하는 등 다양한 최적화. 고정점(fixed point)까지
Join ordering 메모리 압박을 줄이기 위해 어떤 조인을 먼저 실행할지 추정한다. 1회
Type coercion 연산이 성공하고 최소한의 메모리로 실행되도록 타입을 조정한다. 고정점(fixed point)까지
Cardinality estimation 최적의 group by 전략을 정하기 위해 카디널리티를 추정한다. 0/n회, 쿼리에 따라 다름

더 알아보기 (Learn more)

  • 쿼리 플랜에서 각 최적화가 어떻게 반영되는지 눈으로 확인하려면 쿼리 플랜 문서를 보세요.
  • 대표적인 최적화인 predicate pushdown과 projection pushdown의 실제 예시는 Lazy API 문서에서 다룹니다.