У меня есть 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 г.