Hello mail group members,

I started a new job as PostgreSQL DBA. This is my first mail, I hope the mail I 
sent meets the rules.

There is a query that runs slowly when I look at the logs of the database. When 
I check the resources of the system, there is no problem in the resources, but 
this query running slowly.  There is no "Seq Scan" in the queries, so the 
tables are already indexed. But I did not fully understand if the indexes were 
made correctly. When I analyze the query result on explain.depesz, it seems 
that the query is taking too long.

How should I fix the query below? How should I read the output of 
explain.depesz?

Thank you in advance for your help.


select pro.id as pro_id
   , pro.code
   , coalesce(s.is_pick, false)
   , coalesce(sum(sb.quantity), 0) as pick_quantity
from mainproduct_productmetaproduction pro, order_basketitemdetail bid
left join shelf_shelvedproductbatch sb on sb.basketitem_detail_id = bid.id
left join shelf_shelvedproducts sp on sp.id = sb.shelved_product_id
left join shelf_shelf s on s.id = sp.shelf_id
where pro.id = bid.production_id
and (
                  select coalesce(sum(bid.quantity), 0)
                  from order_basketitem bi
                           , order_basketitemdetail bid
                           , order_order o
                  where o.type in (2,7,9) and o.id = bi.order_id
                  and o.is_cancelled = false
                  and bi.is_cancelled = false
                  and o.is_closed = false
          and o.is_picked = false
          and o.is_invoiced = false
          and o.is_sent = false
                  and bi.id = bid.basketitem_id
                  and bid.quantity > (
                                                                select 
coalesce(sum(picked_quantity),0)
                                                                from 
order_basketitembatch bib
                                                                where 
bib.detail_id=bid.id
                                                         )
                  and bid.code = pro.code
          ) > 0
group by 1,2,3 --,bid.pallet_item_quantity
having coalesce(s.is_pick, false)
and round((coalesce(sum(sb.quantity), 0) / 
GREATEST(MAX(bid.pallet_item_quantity), 1)::float)::numeric, 2) <= 0.15

https://explain.depesz.com/s/G4vq

Yours truly,
Kemal Ortanca

Reply via email to