join_collapse_limit
명시적 JOIN 구문(FULL JOIN 제외)을 FROM 리스트 항목으로 풀어 쓸 때, 결과 항목 수가 이 값 이하인 경우에만 재작성합니다. 기본값은 from_collapse_limit와 같습니다.
join 순서를 자유롭게 재배열하려면 planner가 명시적 JOIN을 FROM 항목으로 풀어야 합니다. 값을 줄이면 재배열 범위가 좁아져 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 문서