数据查询读取优化
主要隨著數據的增加,用到in的,消耗時間幾何增長。由于在前期測試評估不到位,沒有查看具體的代碼。測試版數據量跟線上的數據差距很大,一般很難看出。對于涉及多表復雜查詢的功能需要特別留意。
?
優化前 線上74.031秒,測試版0.031秒。隨著數據量增加而增加。
select * from (select "Extent1".*,row_number() OVER(ORDER BY ID desc) as "row_number"from (select *from (select s.id,s.shipment_no,s.order_no,s.destination,s.estimated_ship_date,s.orig_warehouse_idfrom ship_shipment sWhere is_deleted = 0and not exists(select sst.idfrom ship_shipment sstleft join ship_picklist_item spion spi.shipment_id = sst.idleft join ship_picklist spon sp.id = spi.picklist_idinner join (select te.type,ti.work_effort_id,ti.bill_id_tofrom trsf_work_effort teinner join trsf_work_effort_item tion ti.work_effort_id = te.idand te.type = 13where ti.is_deleted = 0) ton t.bill_id_to = spi.idwhere spi.is_deleted = 0and sp.pick_type = 3and sst.id = s.id)and not exists(select pi.shipment_idfrom ship_picklist_item pileft join ship_picklist sppon spp.id = pi.picklist_idleft join trsf_work_effort tweon twe.id = pi.work_effort_idwhere spp.pick_type = 3and twe.status != 3and pi.is_deleted = 0and pi.shipment_id = s.idgroup by pi.shipment_id)) ssWhere 1 = 1and id in(select i.shipment_idfrom ship_picklist_item iinner join ship_picklist spon sp.id = i.picklist_idand sp.pick_type = 3where i.is_deleted = 0group by i.shipment_idhaving sum(nvl(i.quantity_picked, 0)) = sum(nvl(i.quantity_sorted, 0)) and sum(nvl(i.quantity_picked, 0)) > 0)and ss.ORIG_WAREHOUSE_ID = 170) "Extent1") "Extent2"where "row_number" > 0and rownum <= 20?
優化后:線上0.359秒 ?測試版:0.047秒
select * from (select s.id,s.shipment_no,s.order_no,s.destination,s.estimated_ship_date,s.orig_warehouse_idfrom ship_shipment sWhere is_deleted = 0 and not exists(select sst.idfrom ship_shipment sstleft join ship_picklist_item spion spi.shipment_id = sst.idleft join ship_picklist spon sp.id = spi.picklist_idinner join (select te.type, ti.work_effort_id, ti.bill_id_tofrom trsf_work_effort teinner join trsf_work_effort_item tion ti.work_effort_id = te.idand te.type = 13where ti.is_deleted = 0) ton t.bill_id_to = spi.idwhere spi.is_deleted = 0and sp.pick_type = 3and sst.id = s.id)and not exists (select pi.shipment_idfrom ship_picklist_item pileft join ship_picklist sppon spp.id = pi.picklist_idleft join trsf_work_effort tweon twe.id = pi.work_effort_idwhere spp.pick_type = 3and twe.status != 3and pi.is_deleted = 0and pi.shipment_id = s.idgroup by pi.shipment_id)) ss, (select i.shipment_idfrom ship_picklist_item i inner join ship_picklist spon sp.id = i.picklist_idand sp.pick_type = 3where i.is_deleted = 0 group by i.shipment_idhaving sum(nvl(i.quantity_picked, 0)) = sum(nvl(i.quantity_sorted, 0)) and sum(nvl(i.quantity_picked, 0)) > 0) spi where ss.id = spi.shipment_id and ss.orig_warehouse_id = 1?
轉載于:https://www.cnblogs.com/llvoeto/p/6085954.html
總結
- 上一篇: 自然语言15_Part of Speec
- 下一篇: Spring中ApplicationCo