Quick Flow
text
1. 실제로 느린 query와 parameter를 확보
2. 가장 많은 time·rows·loops를 만든 node 확인
3. estimated rows와 actual rows 차이 확인
4. Seq/Index/Bitmap Scan과 Join 선택 이유 확인
5. index·통계·query를 바꾼 뒤 같은 조건으로 재측정Plan의 cost는 milliseconds가 아니라 optimizer의 상대 비용 단위입니다. EXPLAIN ANALYZE는 query를 실제 실행하므로 write query와 production 부하에서는 영향 범위를 먼저 확인합니다.
주요 노드
Seq Scan은 table의 큰 비율을 읽을 때 합리적일 수 있고, Index Scan은 선택적인 조건에 유리합니다. Bitmap Index Scan과 Bitmap Heap Scan 조합은 여러 index 결과나 중간 규모 row 집합을 page 단위로 모아 읽을 때 선택될 수 있습니다.
Nested Loop는 바깥 결과가 작고 안쪽 lookup이 쌀 때, Hash Join은 equality join의 큰 입력에, Merge Join은 정렬된 입력을 순차 결합할 때 유리할 수 있습니다. 이름만 보고 우열을 정하지 않고 row 수와 memory·I/O 조건을 봅니다.
자주 틀리는 점
- Seq Scan이 보인다는 이유만으로 index를 바로 추가하지 않습니다.
- 예상 row와 실제 row 차이가 크면 column 통계와 상관관계를 먼저 확인합니다.
- Node의
actual time을 단순 합산하지 않습니다. 부모 시간에 자식 시간이 포함될 수 있습니다. - 개발용 작은 데이터의 plan을 production 분포에 그대로 일반화하지 않습니다.
참고 링크
2 sources