NVL 속도 개선 관련2 0 4 2,914

by 비연 [SQL Query] NVL 속도 쿼리 [2023.07.07 07:52:34]


며칠전 NVL 관련하여 많은 공부가 되고 있습니다. 정말 감사드립니다. 
다른 케이스인데, 심플한 쿼리인데도 이 부분도 속도가 안나오는 이유는 무엇인지 조언 부탁드립니다. 

유사 케이스라 생각을 했는데, 이건 또 다른 방향으로의 개선이 필요한 것인지요..

SELECT A.req_no                                                    AS vbelv  --오더번호(출하요청) 
       ,A.req_item_no                                               AS posnv  --싱위오더번호아이템 순번    
       ,A.p_req_no --오더번호       
       ,sap_order_no                                                AS vbeln  --재고오더
       ,sap_order_item_no                                           AS posnr --품목번호  
       ,To_char(To_date(A.ord_dt), 'YYYY-MM-DD')                    AS ORD_DT --오더입력일
       ,'R'                                                         AS status --진행상태
       ,W_fn_code_filter_nm('MC1102', 1, A.req_status, NULL)        AS REQ_STATUS_NM
       ,'R'                                                         AS gi_status  --진행상태
       ,A.steel_kind                                                AS skind    --강종
       ,W_fn_code_filter_nm('SKIND', 1, A.steel_kind, NULL)         AS skind_nm --강종명
       ,A.steel_standard                                            AS sstan  --규격
       ,A.steel_length                                              AS slength --길이 
       ,A.ton_wgt --결속구분
       ,W_fn_code_filter_nm('MC1101', 1, A.ton_wgt, 'KO')           AS TON_WGT_NM  --결속구분명
       ,from_plnt_no                                                AS WERKS_CD     --플랜트
       ,rmn_qty - (SELECT Nvl(SUM(req_qty), 0)
                  FROM   (SELECT p_req_no,
                                 req_qty
                          FROM   sales.w_tb_delivery_order_master ST
                          WHERE  ST.p_req_no = A.req_no
                                 AND req_status = 'C'
                                 AND ST.cust_gb = CASE
                                                    WHEN Length(temp1) > 13 THEN
                                                    '70'
                                                    ELSE ST.cust_gb
                                                  END
                                 AND use_yn = 'Y'))                AS RMN_QTY

       ,A.item_type
FROM   w_tb_wos_order_master M inner join sales.w_tb_delivery_order_master a       
       ON M.order_master_id = A.p_req_no
       left outer join w_tb_wos_customer_delivery B ON ( A.arrive_code = B.seq )
       left outer join w_vw_sy_customer_master C ON ( A.cust_no = C.kunag AND A.site_no = C.kunwe
                         AND A.comp_cd = C.company_cd )
       left outer join w_vw_sy_customer_master C2 ON ( A.reg_user = C2.kunwe AND A.comp_cd = C2.company_cd )
       left outer join w_tb_sy_member_master E ON ( A.reg_user = E.member_id )
WHERE  A.rmn_qty > 0
       AND A.p_req_no LIKE 'OMI%'
       AND A.use_yn = 'Y'
       AND A.dlv_req_dt BETWEEN '20230702' AND '20230708'
ORDER  BY A.req_no DESC 

by 도라지요 [2023.07.07 10:35:31]

아악! 눈이!! 레드빔! ㅎㅎ 


by 비연 [2023.07.10 08:03:17]

에구..죄송합니다. 


by ㅇㅇ준 [2023.07.07 13:11:16]

대량의 데이터 처리일 경우 스칼라 서브쿼리의 사용은 피해주시는것이 좋습니다


by 마농 [2023.07.10 09:12:00]

기존 질문에서도 이미 답변 드렸듯이.
스칼라 서브쿼리를 아우터 조인으로 변경하는 방안이 있습니다.
테이블의 정의나 테이블간의 관계를 정확하게 모르는 상태에서 쿼리를 변경 작성해 드리기는 어렵습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입