join_collapse_limit
| 버전 | 기본값 | context | 타입 |
|---|---|---|---|
| 14 | — | user | integer |
| 15 | — | user | integer |
| 16 | — | user | integer |
| 17 | — | user | integer |
| 18 | — | user | integer |
| 19 | — | user | integer |
명시적 JOIN 구문(FULL JOIN 제외)을 FROM 리스트 항목으로 풀어 쓸 때, 결과 항목 수가 이 값 이하인 경우에만 재작성한다. 기본값은 from_collapse_limit와 같다.
planner는 명시적 JOIN을 FROM 항목으로 풀어야 join 순서를 자유롭게 재배열할 수 있다. 값을 줄이면 재배열 범위가 좁아져 planning 시간은 줄지만 plan 품질이 떨어질 수 있다. from_collapse_limit와 마찬가지로, 이 값을 geqo_threshold 이상으로 올리면 GEQO planner가 발동해 비최적 plan이 나올 수 있다.
1로 설정하면 명시적 JOIN의 재배열이 전면 금지되어, 쿼리에 적힌 join 순서가 실제 실행 순서가 된다. planner가 최적 join 순서를 항상 찾아내지는 못하므로, 숙련된 사용자가 세션 단위로 이 값을 1로 두고 원하는 join 순서를 쿼리에 직접 명시하는 고급 기법으로 쓰인다.
운영 노트: join이 많은 쿼리에서 planner가 계속 나쁜 순서를 고른다면,
SET join_collapse_limit = 1 후 쿼리의 JOIN 순서를 직접 배열해 plan을 고정할 수 있다. 다만 데이터 분포가 바뀌면 고정한 순서가 나빠질 수 있으므로 통계 변화를 함께 관리해야 한다.출처: PostgreSQL 18 문서