Re: postgresql-14 slow query
От | Doug Reynolds |
---|---|
Тема | Re: postgresql-14 slow query |
Дата | |
Msg-id | 010001802f472693-b1f90032-4f2d-4ba4-8554-4732c19ca814-000000@email.amazonses.com обсуждение исходный текст |
Ответ на | postgresql-14 slow query (Kenny Bachman <kenny.bachman17@gmail.com>) |
Список | pgsql-admin |
I would move the WHERE filter into a subquery and then run the ORDER BY/DISTINCT on the subquery result. I like to avoidDISTINCT on queries using an ANTIJOIN or SEMIJOIN if possible. It is hard to recommend without knowing your data. Sent from my iPhone > On Apr 15, 2022, at 4:59 PM, Kenny Bachman <kenny.bachman17@gmail.com> wrote: > > > Hello Team, > > How can I tune this query? It got even slower when I created the index for (state_id, order_id desc). The following explainanalyze output is without an index. It takes 13 seconds if I create that index. Could you help me? > > Thank you so much for your help. > > SELECT DISTINCT ON (order_history.order_id) order_id, order_history.creation_date AS c_date > FROM work.order_history WHERE (order_history.state_id = ANY (ARRAY[30, 51, 63, 136, 195, 233, 348])) AND order_history.is_false= 0 > ORDER BY order_history.order_id DESC; > > EXPLAIN ANALYZE output: > > Unique (cost=672007.46..1519683.55 rows=206423 width=12) (actual time=1701.420..3439.095 rows=2049357 loops=1) > -> Gather Merge (cost=672007.46..1502346.48 rows=6934827 width=12) (actual time=1701.419..2989.243 rows=6891551 loops=1) > Workers Planned: 4 > Workers Launched: 4 > -> Sort (cost=671007.40..675341.67 rows=1733707 width=12) (actual time=1657.609..1799.723 rows=1378310 loops=5) > Sort Key: order_id DESC > Sort Method: external merge Disk: 38960kB > Worker 0: Sort Method: external merge Disk: 31488kB > Worker 1: Sort Method: external merge Disk: 36120kB > Worker 2: Sort Method: external merge Disk: 31368kB > Worker 3: Sort Method: external merge Disk: 36152kB > -> Parallel Seq Scan on order_history (cost=0.00..473993.00 rows=1733707 width=12) (actual time=0.041..1211.485rows=1378310 loops=5) > Filter: ((is_false = 0) AND (state_id = ANY ('{30,51,63,136,195,233,348}'::integer[]))) > Rows Removed by Filter: 3268432 > Planning Time: 0.405 ms > Execution Time: 3510.433 ms
В списке pgsql-admin по дате отправления: