최적화
최적화
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회, 쿼리에 따라 다름 |