sql优化

    xiaoxiao2021-10-31  69

    优化前sql

    SELECT p.PK_NO PK_NO,        p.PICK_CODE PICK_CODE,        p.LOGISTIC_CODE LOGISTIC_CODE,        p.ROUTE_CODE ROUTE_CODE,        p.CAR_CODE CAR_CODE,        p.LOGISTIC_USER_NO LOGISTIC_USER_NO,        p.LOGISTIC_USER_CODE LOGISTIC_USER_CODE,        p.LOGISTIC_NAME LOGISTIC_NAME,        p.PICK_USER_NO PICK_USER_NO,        p.PICK_NAME PICK_NAME,        p.WH_C WH_C,        p.STATUS_FLG STATUS_FLG,        p.SOURCE_TYPE SOURCE_TYPE,        to_char(p.CREATE_DATE, 'yyyy-mm-dd hh24:mi:ss') CREATE_DATE,        brm.route_name,        (select count(*)           from order_pick_item opi          where opi.mas_pk_no = p.pk_no) ordercount,        (SELECT sum(oi.UOM_QTY)           FROM order_mas om, order_item oi          WHERE om.pk_no = oi.mas_pk_no            AND om.pk_no IN (select opi.order_pk_no                               from order_pick_item opi                              where opi.mas_pk_no = p.pk_no)) orderitemcount,        0 typeValue   FROM order_pick p, B2B_ROUTE_MAS brm  WHERE 1 = 1    AND p.route_code = brm.route_code    AND p.LOGISTIC_CODE = 'GZGYSOP1'    AND p.status_flg = 'W'    AND p.WH_C = 'GZGYSOP1'  使用with将过滤或处理后的结果先缓存到临时表(此处原理不太清楚,仅代表我的理解),可以大大提高查询效率  

    优化后sql

    with t as  (select C.PK_NO,sum(D.UOM_QTY)orderitemcount  FROM ORDER_MAS A,order_pick_item B, order_pick C,ORDER_ITEM D WHERE A.pk_no=B.order_pk_no AND B.MAS_PK_NO=C.PK_NO AND A.PK_NO=D.MAS_PK_NO GROUP BY C.PK_NO), t1 as (select  p.pk_no,count(*) ordercount           from order_pick_item opi,order_pick p          where opi.mas_pk_no = p.pk_no          group by  p.pk_no) SELECT p.PK_NO PK_NO,        p.PICK_CODE PICK_CODE,        p.LOGISTIC_CODE LOGISTIC_CODE,        p.ROUTE_CODE ROUTE_CODE,        p.CAR_CODE CAR_CODE,        p.LOGISTIC_USER_NO LOGISTIC_USER_NO,        p.LOGISTIC_USER_CODE LOGISTIC_USER_CODE,        p.LOGISTIC_NAME LOGISTIC_NAME,        p.PICK_USER_NO PICK_USER_NO,        p.PICK_NAME PICK_NAME,        p.WH_C WH_C,        p.STATUS_FLG STATUS_FLG,        p.SOURCE_TYPE SOURCE_TYPE,        to_char(p.CREATE_DATE, 'yyyy-mm-dd hh24:mi:ss') CREATE_DATE,        brm.route_name,        t1.ordercount,        t.orderitemcount,        0 typeValue   FROM order_pick p LEFT JOIN T ON P.PK_NO=T.PK_NO   LEFT JOIN T1 ON P.PK_NO=T1.PK_NO, B2B_ROUTE_MAS brm    WHERE 1 = 1    AND p.route_code = brm.route_code    AND P.PK_NO=T.PK_NO    AND P.PK_NO=T1.PK_NO    AND p.LOGISTIC_CODE = 'GZGYSOP1'    AND p.status_flg = 'W'    AND p.WH_C = 'GZGYSOP1'
    转载请注明原文地址: https://ju.6miu.com/read-677915.html

    最新回复(0)