# Список занятых мест

    => EXPLAIN SELECT f.flight_id, bp.seat_no
      FROM flights f
        JOIN boarding_passes bp ON bp.flight_id = f.flight_id;

                                        QUERY PLAN
    -----------------------------------------------------------------------------------
     Hash Join  (cost=7985.51..225367.71 rows=7925845 width=7)
       Hash Cond: (bp.flight_id = f.flight_id)
       ->  Seq Scan on boarding_passes bp  (cost=0.00..133919.45 rows=7925845 width=7)
       ->  Hash  (cost=4564.67..4564.67 rows=214867 width=4)
             ->  Seq Scan on flights f  (cost=0.00..4564.67 rows=214867 width=4)
    (5 rows)

Использовано соединение хешированием.

    => EXPLAIN (COSTS OFF, ANALYZE) SELECT f.flight_id, bp.seat_no
      FROM flights f
        JOIN boarding_passes bp ON bp.flight_id = f.flight_id;

                                           QUERY PLAN
    -----------------------------------------------------------------------------------------
     Hash Join (actual time=220.598..10245.637 rows=7925812 loops=1)
       Hash Cond: (bp.flight_id = f.flight_id)
       ->  Seq Scan on boarding_passes bp (actual time=0.499..3678.391 rows=7925812 loops=1)
       ->  Hash (actual time=219.576..219.577 rows=214867 loops=1)
             Buckets: 262144  Batches: 2  Memory Usage: 3553kB
             ->  Seq Scan on flights f (actual time=0.482..110.486 rows=214867 loops=1)
     Planning time: 0.248 ms
     Execution time: 12249.401 ms
    (8 rows)

Хеш-таблица не поместилась целиком в память, потребовалось 2 пакета.

# Количество занятых мест

    => EXPLAIN SELECT count(*)
      FROM flights f
        JOIN boarding_passes bp ON bp.flight_id = f.flight_id;

                                                     QUERY PLAN
    -------------------------------------------------------------------------------------------------------------
     Finalize Aggregate  (cost=136907.22..136907.23 rows=1 width=8)
       ->  Gather  (cost=136907.01..136907.22 rows=2 width=8)
             Workers Planned: 2
             ->  Partial Aggregate  (cost=135907.01..135907.02 rows=1 width=8)
                   ->  Hash Join  (cost=7985.51..127650.92 rows=3302435 width=0)
                         Hash Cond: (bp.flight_id = f.flight_id)
                         ->  Parallel Seq Scan on boarding_passes bp  (cost=0.00..87685.35 rows=3302435 width=4)
                         ->  Hash  (cost=4564.67..4564.67 rows=214867 width=4)
                               ->  Seq Scan on flights f  (cost=0.00..4564.67 rows=214867 width=4)
    (9 rows)

Здесь планировщик использовал параллельный план. В предыдущем запросе это не было оправдано из-за высокой стоимости пересылки данных между процессами, а в данном случае передается только одно число.

    => EXPLAIN (COSTS OFF, ANALYZE) SELECT count(*)
      FROM flights f
        JOIN boarding_passes bp ON bp.flight_id = f.flight_id;

                                                         QUERY PLAN
    --------------------------------------------------------------------------------------------------------------------
     Finalize Aggregate (actual time=11603.584..11603.585 rows=1 loops=1)
       ->  Gather (actual time=11594.714..11614.365 rows=3 loops=1)
             Workers Planned: 2
             Workers Launched: 2
             ->  Partial Aggregate (actual time=11583.669..11583.670 rows=1 loops=3)
                   ->  Hash Join (actual time=518.764..9210.885 rows=2641937 loops=3)
                         Hash Cond: (bp.flight_id = f.flight_id)
                         ->  Parallel Seq Scan on boarding_passes bp (actual time=0.025..2976.753 rows=2641937 loops=3)
                         ->  Hash (actual time=514.073..514.074 rows=214867 loops=3)
                               Buckets: 262144  Batches: 2  Memory Usage: 3553kB
                               ->  Seq Scan on flights f (actual time=0.022..254.237 rows=214867 loops=3)
     Planning time: 0.266 ms
     Execution time: 11614.454 ms
    (13 rows)

Обратите внимание на поле loops в узлах выше и ниже Gather - оно соответствует реальному числу процессов, работавших над запросом.