본문으로 건너뛰기

4.1 Seq, Index, Bitmap Scan

Planner는 조건에 맞는 row 비율과 heap 접근 비용을 비교해 scan을 선택합니다.

EXPLAIN (ANALYZE, BUFFERS)
SELECT * FROM orders WHERE id = 100;

EXPLAIN (ANALYZE, BUFFERS)
SELECT * FROM orders WHERE status = 'paid';
  • Seq Scan: table의 많은 page가 필요할 때 효율적입니다.
  • Index Scan: 적은 row를 찾고 heap 접근 순서가 충분히 저렴할 때 유리합니다.
  • Bitmap Scan: 여러 index hit를 모아 heap page 단위로 접근합니다.

Bitmap Heap Scan의 Recheck Cond와 lossy block을 확인합니다. Bitmap이 work_mem을 초과하면 exact tuple 위치 대신 page 단위가 돼 filter 재검사가 늘 수 있습니다.

Cost와 cache

random_page_cost, seq_page_cost, effective_cache_size는 hardware를 직접 benchmark한 값이 아니라 planner의 상대 cost와 cache 기대를 나타냅니다. 특정 query에 index를 강제하려고 값을 왜곡하지 않습니다.

Index 추가 전 읽기 이득과 write, vacuum, storage 비용을 함께 계산합니다. 조건 selectivity가 시간에 따라 변하면 plan도 달라질 수 있습니다.