create table mill (a int); create index on mill(a); insert into mill select x%1000 from generate_Series(1,10000000)x; vacuum analyze mill; create table big (a int primary key); insert into big select x from generate_series(1,10000000)x; create table probe (a int); insert into probe select 1 from generate_Series(1,1000000); analyze big,probe; create table agg (a int, b int); insert into agg select a%1000,a from generate_Series(1,1000000)a; create index on agg(a); set parallel_tuple_cost=0; set parallel_setup_cost=0; set enable_indexscan=0; -- each includes "Worker N:" with stats for the operation. explain (analyze) select * from mill where a < 100; -- Bitmap Heap Scan explain (analyze) select * from big b inner join probe p on b.a=p.a; -- Memoize explain (analyze) select * from probe order by a; -- Sort set enable_nestloop=0; explain (analyze) select a,count(b) from agg group by a; -- HashAgg ODD ONE OUT. GETS MAX DETAILS FROM WORKERS. explain (analyze) select * from big b inner join probe p on b.a=p.a; -- Hash reset enable_nestloop; set enable_indexscan=1; set enable_bitmapscan=0; set enable_seqscan=0; explain (analyze) select a,b from agg where a > 10 order by a,b; -- Incremental Sort set enable_indexscan=0; set enable_bitmapscan=1; set enable_seqscan=1; -- each includes "Worker N:" with stats for the operation -- also includes actual time and rows for each worker. explain (analyze, verbose) select * from mill where a < 100; -- Bitmap Heap Scan explain (analyze, verbose) select * from big b inner join probe p on b.a=p.a; -- Memoize explain (analyze, verbose) select * from probe order by a; -- Sort set enable_nestloop=0; explain (analyze, verbose) select a,count(b) from agg group by a; -- HashAgg ODD ONE OUT. GETS MAX DETAILS FROM WORKERS. explain (analyze, verbose) select * from big b inner join probe p on b.a=p.a; -- Hash reset enable_nestloop; set enable_indexscan=1; set enable_bitmapscan=0; set enable_seqscan=0; explain (analyze, verbose) select a,b from agg where a > 10 order by a,b; -- Incremental Sort set enable_indexscan=0; set enable_bitmapscan=1; set enable_seqscan=1; -- each includes "Worker N:" with stats for the operation -- shows a single total buffers which includes leader and worker buffers. explain (analyze, buffers) select * from mill where a < 100; -- Bitmap Heap Scan explain (analyze, buffers) select * from big b inner join probe p on b.a=p.a; -- Memoize explain (analyze, buffers) select * from probe order by a; -- Sort set enable_nestloop=0; explain (analyze, buffers) select a,count(b) from agg group by a; -- HashAgg ODD ONE OUT. GETS MAX DETAILS FROM WORKERS. reset enable_nestloop; set enable_indexscan=1; set enable_bitmapscan=0; set enable_seqscan=0; explain (analyze, buffers) select a,b from agg where a > 10 order by a,b; -- Incremental Sort set enable_indexscan=0; set enable_bitmapscan=1; set enable_seqscan=1; -- each includes "Worker N:" with stats for the operation -- also includes actual time and rows for each worker. -- shows a single total buffers which includes leader and worker buffers. -- shows buffer counts for each worker process explain (analyze, buffers, verbose) select * from mill where a < 100; -- Bitmap Heap Scan explain (analyze, buffers, verbose) select * from big b inner join probe p on b.a=p.a; explain (analyze, buffers, verbose) select * from probe order by a; -- Sort set enable_nestloop=0; explain (analyze, buffers, verbose) select a,count(b) from agg group by a; -- HashAgg ODD ONE OUT. GETS MAX DETAILS FROM WORKERS. reset enable_nestloop; set enable_indexscan=1; set enable_bitmapscan=0; set enable_seqscan=0; explain (analyze, buffers, verbose) select a,b from agg where a > 10 order by a,b; -- Incremental Sort set enable_indexscan=0; set enable_bitmapscan=1; set enable_seqscan=1;