Configuring Query Planner

1. Setting random_page_cost

random_page_cost = 1.1     # SSD (default 4.0 for HDD)

2. Setting seq_page_cost

seq_page_cost = 1.0        # baseline

3. Setting cpu_tuple_cost

cpu_tuple_cost = 0.01      # per-row processing cost

4. Setting cpu_index_tuple_cost

cpu_index_tuple_cost = 0.005

5. Setting cpu_operator_cost

cpu_operator_cost = 0.0025
ParameterLower → Planner Prefers
random_page_costIndex scans
seq_page_costSeq scans
cpu_*Index/hash over many-row processing

6. Setting effective_io_concurrency

effective_io_concurrency = 200     # SSD; helps Bitmap Heap Scan prefetch

7. Setting enable_seqscan

SET enable_seqscan = off;     -- debugging only; never in production GUC

8. Setting enable_indexscan

SET enable_indexscan = on;

9. Setting enable_bitmapscan

SET enable_bitmapscan = on;

10. Setting enable_hashjoin

SET enable_hashjoin = on;

11. Setting enable_mergejoin

SET enable_mergejoin = on;

12. Setting enable_nestloop

SET enable_nestloop = on;
Warning: enable_* are diagnostic toggles. Disabling them adds a huge cost penalty; planner may still pick a Seq Scan if it's the only option.

13. Setting enable_parallel_append, enable_parallel_hash

enable_parallel_append = on
enable_parallel_hash   = on

14. Setting max_parallel_workers_per_gather

max_parallel_workers_per_gather = 4
max_parallel_workers            = 8
max_parallel_maintenance_workers = 4

15. Setting jit

jit                    = on
jit_above_cost         = 100000
jit_inline_above_cost  = 500000
jit_optimize_above_cost = 500000
Note: JIT helps OLAP queries with millions of rows + complex expressions. Often a net loss on OLTP.