enable_material
| 버전 | 기본값 | 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가 materialization을 사용할지 정한다. 기본값은 on이다.
Materialize 노드는 하위 노드의 출력을 메모리나 임시 파일에 담아 두었다가, 상위 노드가 같은 데이터를 반복해서 읽을 때 하위 plan을 다시 실행하지 않고 저장본을 돌려준다. 대표적으로 nested loop join의 안쪽 입력에 끼워 넣어, 바깥쪽 row마다 안쪽 scan을 처음부터 반복하는 비용을 줄인다. off로 해도 materialization이 완전히 사라지지는 않는다. 정확성을 위해 필요한 경우에는 planner가 여전히 Materialize 노드를 넣고, 단지 선택적인 삽입만 하지 않게 된다.
운영 노트: off는 진단 용도다. Materialize가 낀 plan이 의심될 때 세션에서 끄고 EXPLAIN (ANALYZE)를 비교해, 반복 scan 비용과 materialization 비용 중 어느 쪽이 실제로 싼지 확인하는 식으로 쓴다.
출처: PostgreSQL 18 문서