slow query to improve performace

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

Could some some verify the attached query to verify the performance and suggest some steps to improve it, this query is created as a view. This view is used to get the aggregates of orders based on its current status

Thanks
HashAggregate  (cost=334063.59..334064.17 rows=58 width=213) (actual time=1180.016..1180.053 rows=49 loops=1)
  Group Key: c.city_id, '2022-02-25 23:09:26.587835'::timestamp without time zone, (count(*))
  ->  Nested Loop Left Join  (cost=154967.02..312398.93 rows=133321 width=92) (actual time=450.918..961.314 rows=156105 loops=1)
        Join Filter: (c_1.city_id = c.city_id)
        Rows Removed by Join Filter: 103951
        ->  Hash Join  (cost=2343.27..154695.90 rows=133321 width=76) (actual time=12.345..456.445 rows=156105 loops=1)
              Hash Cond: (b.city_id = c.city_id)
              ->  Hash Join  (cost=2324.74..154301.83 rows=133321 width=55) (actual time=12.266..420.340 rows=156105 loops=1)
                    Hash Cond: (o.branch_id = b.branch_id)
                    ->  Append  (cost=0.57..151627.65 rows=133321 width=55) (actual time=0.022..347.441 rows=156105 loops=1)
                          Subplans Removed: 23
                          ->  Index Scan using restaurant_order_p_202202_202203_date_time_idx on restaurant_order_p_202202_202203 o  (cost=0.56..150904.37 rows=133298 width=55) (actual time=0.022..333.768 rows=156105 loops=1)
                                Index Cond: ((date_time >= '2022-02-25 05:00:00'::timestamp without time zone) AND (date_time <= '2022-02-25 23:09:26.587835'::timestamp without time zone))
                    ->  Hash  (cost=1942.41..1942.41 rows=30541 width=16) (actual time=12.172..12.172 rows=29242 loops=1)
                          Buckets: 32768  Batches: 1  Memory Usage: 1627kB
                          ->  Seq Scan on branch b  (cost=0.00..1942.41 rows=30541 width=16) (actual time=0.005..7.358 rows=29242 loops=1)
              ->  Hash  (cost=17.80..17.80 rows=58 width=29) (actual time=0.072..0.072 rows=58 loops=1)
                    Buckets: 1024  Batches: 1  Memory Usage: 12kB
                    ->  Index Only Scan using city_idx$$_274b0022 on city c  (cost=0.27..17.80 rows=58 width=29) (actual time=0.011..0.056 rows=58 loops=1)
                          Index Cond: (city_id IS NOT NULL)
                          Heap Fetches: 40
        ->  Materialize  (cost=152623.75..155703.21 rows=1 width=16) (actual time=0.003..0.003 rows=1 loops=156105)
              ->  GroupAggregate  (cost=152623.75..155703.19 rows=1 width=16) (actual time=438.567..438.611 rows=2 loops=1)
                    Group Key: c_1.city_id
                    ->  Nested Loop Left Join  (cost=152623.75..155703.18 rows=1 width=8) (actual time=434.578..438.605 rows=6 loops=1)
                          ->  Nested Loop  (cost=152623.32..155701.62 rows=1 width=16) (actual time=434.569..438.581 rows=6 loops=1)
                                Join Filter: (b_1.city_id = c_1.city_id)
                                Rows Removed by Join Filter: 342
                                ->  Index Only Scan using city_pk on city c_1  (cost=0.27..13.27 rows=58 width=8) (actual time=0.015..0.062 rows=58 loops=1)
                                      Heap Fetches: 40
                                ->  Materialize  (cost=152623.06..155687.49 rows=1 width=16) (actual time=7.492..7.560 rows=6 loops=58)
                                      ->  Nested Loop  (cost=152623.06..155687.48 rows=1 width=16) (actual time=434.549..438.450 rows=6 loops=1)
                                            ->  Nested Loop  (cost=152622.77..155687.17 rows=1 width=32) (actual time=434.539..438.425 rows=6 loops=1)
                                                  Join Filter: (r_1.restaurant_id = b_1.restaurant_id)
                                                  ->  Nested Loop  (cost=152622.48..155685.14 rows=1 width=24) (actual time=434.529..438.396 rows=6 loops=1)
                                                        ->  GroupAggregate  (cost=152621.92..152628.01 rows=79 width=55) (actual time=434.465..438.214 rows=3 loops=1)
                                                              Group Key: (round(ro_1.total_amount, 2)), ro_1.phone, r_1.restaurant_id
                                                              Filter: (count(1) > 1)
                                                              Rows Removed by Filter: 9365
                                                              ->  Sort  (cost=152621.92..152622.51 rows=236 width=55) (actual time=434.273..435.044 rows=9371 loops=1)
                                                                    Sort Key: (round(ro_1.total_amount, 2)), ro_1.phone, r_1.restaurant_id
                                                                    Sort Method: quicksort  Memory: 1117kB
                                                                    ->  Nested Loop Left Join  (cost=1.83..152612.62 rows=236 width=55) (actual time=163.508..417.596 rows=9371 loops=1)
                                                                          ->  Nested Loop  (cost=1.41..152245.05 rows=236 width=37) (actual time=163.493..396.303 rows=9371 loops=1)
                                                                                ->  Nested Loop  (cost=1.14..152178.31 rows=236 width=45) (actual time=163.475..377.443 rows=9371 loops=1)
                                                                                      ->  Nested Loop  (cost=0.85..152105.61 rows=236 width=45) (actual time=163.459..353.730 rows=9371 loops=1)
                                                                                            ->  Append  (cost=0.57..151628.83 rows=236 width=37) (actual time=163.439..322.719 rows=9371 loops=1)
                                                                                                  Subplans Removed: 23
                                                                                                  ->  Index Scan using restaurant_order_p_202202_202203_date_time_idx on restaurant_order_p_202202_202203 ro_1  (cost=0.56..151570.86 rows=213 width=34) (actual time=163.438..321.864 rows=9371 loops=1)
                                                                                                        Index Cond: ((date_time >= '2022-02-25 05:00:00'::timestamp without time zone) AND (date_time <= '2022-02-25 23:09:26.587835'::timestamp without time zone))
                                                                                                        Filter: ((schedule_datetime IS NULL) AND (order_status_code <> ALL ('{T,J,C,D}'::bpchar[])))
                                                                                                        Rows Removed by Filter: 146734
                                                                                            ->  Index Scan using branch_idx$$_274b0038 on branch b_2  (cost=0.29..2.02 rows=1 width=24) (actual time=0.003..0.003 rows=1 loops=9371)
                                                                                                  Index Cond: (branch_id = ro_1.branch_id)
                                                                                      ->  Index Only Scan using restaurant_idx$$_274b003d on restaurant r_1  (cost=0.29..0.31 rows=1 width=8) (actual time=0.002..0.002 rows=1 loops=9371)
                                                                                            Index Cond: (restaurant_id = b_2.restaurant_id)
                                                                                            Heap Fetches: 6155
                                                                                ->  Index Only Scan using city_pk on city c_2  (cost=0.27..0.28 rows=1 width=8) (actual time=0.001..0.001 rows=1 loops=9371)
                                                                                      Index Cond: (city_id = b_2.city_id)
                                                                                      Heap Fetches: 9141
                                                                          ->  Index Only Scan using order_offer_map_order_id on order_offer_map oom_1  (cost=0.43..1.55 rows=1 width=8) (actual time=0.002..0.002 rows=0 loops=9371)
                                                                                Index Cond: (order_id = ro_1.order_id)
                                                                                Heap Fetches: 34
                                                        ->  Append  (cost=0.57..38.45 rows=24 width=37) (actual time=0.039..0.059 rows=2 loops=3)
                                                              Subplans Removed: 23
                                                              ->  Index Scan using restaurant_order_p_202202_202203_phone_idx on restaurant_order_p_202202_202203 ro  (cost=0.56..14.11 rows=1 width=34) (actual time=0.038..0.057 rows=2 loops=3)
                                                                    Index Cond: ((phone)::text = (ro_1.phone)::text)
                                                                    Filter: ((schedule_datetime IS NULL) AND (date_time >= '2022-02-25 05:00:00'::timestamp without time zone) AND (date_time <= '2022-02-25 23:09:26.587835'::timestamp without time zone) AND (order_status_code <> ALL ('{T,J,C,D}'::bpchar[])) AND ((round(ro_1.total_amount, 2)) = round(total_amount, 2)))
                                                                    Rows Removed by Filter: 12
                                                  ->  Index Scan using branch_idx$$_274b0038 on branch b_1  (cost=0.29..2.02 rows=1 width=24) (actual time=0.003..0.003 rows=1 loops=6)
                                                        Index Cond: (branch_id = ro.branch_id)
                                            ->  Index Only Scan using restaurant_idx$$_274b003d on restaurant r  (cost=0.29..0.31 rows=1 width=8) (actual time=0.003..0.003 rows=1 loops=6)
                                                  Index Cond: (restaurant_id = b_1.restaurant_id)
                                                  Heap Fetches: 6
                          ->  Index Only Scan using order_offer_map_order_id on order_offer_map oom  (cost=0.43..1.55 rows=1 width=8) (actual time=0.003..0.003 rows=0 loops=6)
                                Index Cond: (order_id = ro.order_id)
                                Heap Fetches: 0
Planning Time: 27.392 ms
Execution Time: 1180.579 ms

Attachment: slow_query.sql
Description: Binary data


[Postgresql General]     [Postgresql PHP]     [PHP Users]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Yosemite]

  Powered by Linux