Оптимизация вида мата

У меня есть mat view на основе двух таблиц. Данные mat view:

Он содержит 9 млн строк, а обновление занимает около 20 минут. Я думаю, что это нехорошо? У меня два индекса на обеих таблицах (по столбцу allowed_date). Я никогда раньше не использовал EXPLAIN ANALYZE, просто попробовал и получил это:

Где узкое место? Могу ли я оптимизировать его лучше?

CREATE MATERIALIZED VIEW unilever_ozon_parser.sell_out_ozon_view
AS SELECT sell_out_ozon.contractor,
    sell_out_ozon.year,
    sell_out_ozon.month,
    sell_out_ozon.week,
    ...
    sell_out_ozon.is_express
   FROM unilever_ozon_parser.sell_out_ozon
UNION ALL
 SELECT sell_out_ozon_daily.contractor,
    sell_out_ozon_daily.year,
    sell_out_ozon_daily.month,
    sell_out_ozon_daily.week,
    ...
    sell_out_ozon_daily.is_express
   FROM unilever_ozon_parser.sell_out_ozon_daily
     LEFT JOIN unilever_ozon_parser.sell_out_ozon ON sell_out_ozon_daily.accepted_date = sell_out_ozon.accepted_date
  WHERE sell_out_ozon.* IS NULL
WITH DATA;
Append  (cost=0.00..26126519.58 rows=118553286 width=538) (actual time=0.450..364143.225 rows=9139195 loops=1)
  ->  Seq Scan on sell_out_ozon  (cost=0.00..713367.14 rows=8849314 width=510) (actual time=0.449..4499.518 rows=8849314 loops=1)
  ->  Gather  (cost=761321.93..23723346.29 rows=109703972 width=540) (actual time=99374.355..359335.107 rows=289881 loops=1)
        Workers Planned: 4
        Workers Launched: 4
        ->  Parallel Hash Left Join  (cost=760321.93..12751949.09 rows=27425993 width=540) (actual time=32054.078..103554.179 rows=57976 loops=5)
              Hash Cond: (sell_out_ozon_daily.accepted_date = sell_out_ozon_1.accepted_date)
              Filter: (sell_out_ozon_1.* IS NULL)
              Rows Removed by Filter: 2886423437
              ->  Parallel Seq Scan on sell_out_ozon_daily  (cost=0.00..46786.98 rows=160798 width=540) (actual time=1.156..761.472 rows=128639 loops=5)
              ->  Parallel Hash  (cost=639622.86..639622.86 rows=1474886 width=538) (actual time=4116.381..4116.382 rows=1769863 loops=5)
                    Buckets: 524288 (originally 524288)  Batches: 64 (originally 32)  Memory Usage: 181600kB
                    ->  Parallel Seq Scan on sell_out_ozon sell_out_ozon_1  (cost=0.00..639622.86 rows=1474886 width=538) (actual time=121.311..1884.654 rows=1769863 loops=5)
Planning Time: 6.924 ms
JIT:
  Functions: 60
  Options: Inlining true, Optimization true, Expressions true, Deforming true
  Timing: Generation 2.809 ms, Inlining 147.698 ms, Optimization 274.151 ms, Emission 184.829 ms, Total 609.486 ms
Execution Time: 364323.906 ms
Еремей
Вопрос задан23 августа 2024 г.

1 Ответ

Ваш ответ

Загрузить файл.