enable_nestloop
| 버전 | 기본값 | context | 타입 |
|---|---|---|---|
| 14 | on | user | boolean |
| 15 | on | user | boolean |
| 16 | on | user | boolean |
| 17 | on | user | boolean |
| 18 | on | user | boolean |
| 19 | on | user | boolean |
planner가 nested loop join plan을 사용하는 것을 억제할지 정한다. 기본값은 on이다.
nested loop join은 바깥쪽 입력의 row마다 안쪽 입력을 반복 조회하는 가장 기본적인 join 방식이다. 바깥쪽 row 수가 적고 안쪽에 인덱스가 있으면 매우 빠르지만, row 수 추정이 빗나가 바깥쪽이 예상보다 크면 실행 시간이 폭증하는 대표적인 패턴이기도 하다. off로 해도 완전히 막을 수는 없다. 등호 조건이 없어 다른 join 방법을 쓸 수 없는 경우에는 여전히 nested loop가 쓰이며, planner가 큰 penalty를 얹어 가능한 한 피하게 만들 뿐이다.
운영 노트: off는 진단 도구다. 추정이 어긋나 nested loop가 잘못 선택된 쿼리에서 세션 단위로 끄고 EXPLAIN (ANALYZE)를 비교해 본다. 다만 근본 해법은 통계 개선(ANALYZE,
default_statistics_target) 쪽에서 찾는 것이 맞고, 전역 off는 nested loop가 최선인 쿼리까지 망가뜨린다.출처: PostgreSQL 18 문서