쿼리 전송 속도가 너무 안나옵니다. 0 4 1,337

by ost0831 [2015.04.10 15:09:09]


사용중인 쿼리문은

 

SELECT PT1.*, IS_LOCATION(CARPARTCODE) AS PART_LOCATION FROM (
            SELECT
                ROW_NUMBER() OVER(ORDER BY a.ITEM_SEQ DESC) RN,
                a.ITEM_SEQ, a.ITEM_CODE, a.COM_SEQ, a.ERP_CODE, a.PRODUCTNM,a.CARYYYY, a.GRADE, a.USER_PRICE, a.SUPPLIER_PRICE, a.SALE_PRICE, a.INQUIRY_YN,
                a.FEE_YN, a.BESTYN, a.EVENTYN, a.NEWYN, a.PUBLICYN, a.RECOMMYN, a.SALEYN, a.PLANYN, a.STOCK_NUM,
                a.CARMAKERSEQ, a.CARMODELSEQ, a.CARGRADESEQ, a.PART1, a.PART2, a.PART3, a.COLOR,
                a.REG_DT,a.DISCOUNT_RATE, a.CARPARTCODE, 
                (SELECT MAKERNM FROM V_IS_CARMAKER WHERE a.CARMAKERSEQ=CARMAKERSEQ) AS MAKERNM,
                (SELECT CARMODELNM FROM V_IS_CARMODEL WHERE a.CARMODELSEQ=CARMODELSEQ) AS CARMODELNM,
                (SELECT CARGRADENM FROM V_IS_CARGRADE WHERE a.CARGRADESEQ=CARGRADESEQ) AS CARGRADENM,
                (SELECT CODENM FROM V_IS_CODEMST WHERE a.PART1=CODENO) AS PART1_NM,
                (SELECT CODENM FROM V_IS_CODEMST WHERE a.PART2=CODENO) AS PART2_NM,
                (SELECT DISTINCT PARTNM FROM V_IS_CARPART WHERE DELYN='N' AND a.PART3=CARPARTSEQ) AS PART3_NM,
                (SELECT CODE_NM FROM MC_COMMON_CODE WHERE CODE_GROUP_SEQ = '37' AND a.COLOR=CODE) AS COLOR_NM,
                DECODE(a.APPROVAL, 'Y', '승인', '비승인') as APPROVAL,
                ('/upload/board/'||b.YYYY||'/'||b.MM||'/'||b.UUID) AS THUMB,
                b.ATTACH_NM,
                c.COM_NM, c.STAFF_TEL,
                (SELECT DONG_NM FROM NSH_DONG WHERE c.SIDO_CD=SIDO AND c.SIGUNGU_CD=SIGUNGU AND DONG='000') as SIGUNGU_NM
            FROM NSH_GOODS a LEFT OUTER JOIN (
                SELECT
                    bb.*
                FROM (SELECT max(uuid) as uuid FROM NSH_ATTACH GROUP BY TABLE_NM, TABLE_SEQ) aa LEFT OUTER JOIN NSH_ATTACH bb
                ON aa.UUID = bb.UUID
            ) b
            ON b.TABLE_NM='NSH_GOODS' AND a.ITEM_SEQ = b.TABLE_SEQ
            LEFT OUTER JOIN NSH_COOPERATION c
            ON a.COM_SEQ = c.SEQ
            JOIN V_IS_CARMAKER d
            ON a.CARMAKERSEQ=d.CARMAKERSEQ

WHERE a.DEL_YN='N'
            AND a.GUBUN = nvl(#{gubun}, '1')

            AND (INSTR(a.PRODUCTNM,#{search_all_text}) > 0 

            OR INSTR(a.SEARCH_TAG,#{search_all_text}) > 0 
            OR a.ITEM_CODE = #{search_all_text}
            OR INSTR(e.PARTALIAS,#{search_all_text}) > 0)


        ) PT1
        WHERE CEIL(RN/NVL(10,10))=NVL(1,1)

 

쿼리 검색시 속도가 너무 느려서 그런데 뭐가 문제일까요..... 초보자라 어떻게 설명할수가 없네요

 

답변좀 부탁드립니다.

by 아발란체 [2015.04.10 16:04:43]

조건에서 될 수 있으면 기준 항목을 가공하지 않는 것이 성능상 좋습니다.

PRICE * 100 = :가격  ==> X

PRICE = 가격 / 100  ==> O

 

또한 정확한 것은 해당 테이블 인덱스 구성 및 실행계획을 같이 올려주시는 것이 같이 고민하는데 도움이 될 것 같습니다.


by ost0831 [2015.04.13 16:28:39]

조언 감사드립니다!


by 마농 [2015.04.13 09:24:50]

○ 페이징 처리에 대한 비효율을 개선하세요.
1. 각종 가공 처리(조인, 스칼라서브쿼리) 후 페이징 > 페이징 후 가공
  - 각종 조인 및 서브쿼리등이 쿼리 결과 건수에 영향이 없을 듯 합니다.
  - 메인 테이블 하나만 가지고 페이징 처리한 후 나중에 가공을 추가하세요.
2. 페이징 조건 처리 방식 개선
  - RN 을 가공하여 비교하지 마시고... RN 을 그대로 두고 우변을 가공하세요
  - WHERE rn BETWEEN NVL(10,10) * (NVL(1,1) - 1) + 1 AND NVL(10,10) * NVL(1,1)
 


by ost0831 [2015.04.13 16:28:28]

감사합니다!! 확인 해보겠습니다~!

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