안녕하세요 서브 쿼리 속도 관련 문의 드립니다. 1 2 1,554

by 만년설 [SQL Query] [2015.05.26 10:17:29]


제가 짠 sql 은 아래와 같습니다.

 

SELECT ORG.ORG_CODE 
                , ORG.ORG_NM 
                , ORG.VALID_YN 
                , ORG.RPRSNTV_NM 
                , ORG.BIZRNO 
                , ORG.TELNO 
                , ORG.NATION 
                , ORG.LAW_TYPE 
                , ORG.DECIPHER_TYPE 
                , ORG.REPORT_TYPE 
                , ORG.BIZ_TYPE 
                , ORG.BASE_ADRES 
                , ORG.DTL_ADRES 
                , ORG.POSTNO 
                , ORG.SUB_ORG_MGMT_YN 
                , ORG.SUB_ORG_TYPE 
                , ORG.APPRVL_YN 
                , ORG.APPRVL_DT 
                , ORG_AMD_NO 
                , ORG.UP_ORG_CODE 
                , ORG.REGION 
                , ORG.OUTSRC_ORG_MGMT_YN 
                , ORG.ATCH_FILE_ID 
                , ORG.FRST_REGIST_PNTTM 
                , ORG.FRST_REGISTER_ID 
                , ORG.LAST_UPDT_PNTTM 
                , ORG.LAST_UPDUSR_ID 
                , ORG.PRMISN_MGMT_YN
                , ORG.BIZ_CAT
                , ORG.ENG_ORG_NM
                , null AS IS_REGISTED_CNT
                ,(SELECT WM_CONCAT(PRMISN_SE) AS PRMISN_SE FROM PRMISN 
                    WHERE PRMISN_SE IS NOT NULL AND ORG_CODE = ORG.ORG_CODE) AS PRMISN_SE
                ,(SELECT WM_CONCAT(DCLRT_TYPE) AS DCLRT_TYPE FROM PRMISN 
                    WHERE DCLRT_TYPE IS NOT NULL AND ORG_CODE = ORG.ORG_CODE) AS DCLRT_TYPE
                ,(SELECT WM_CONCAT(TYPE) AS TYPE FROM PRMISN_TYPE 
                    WHERE ORG_CODE = ORG.ORG_CODE) AS TYPE         
                , USERS.LAST_NM
                , USERS.FIRST_NM
                , USERS.EMAIL
                , USERS.MOBILENO
            FROM ORG  ORG 
                LEFT OUTER JOIN AGENT_MGR AM ON AM.ORG_CODE = ORG.ORG_CODE AND AM.RPRSNTV_YN = 'Y'
                LEFT OUTER JOIN USERS USERS ON USERS.ESNTL_ID = AM.ESNTL_ID

 

문제는 데이터가 많아지면서 속도가 올라갓다는 건데요. 서브 쿼리들 때문에 그러더라구요. 

wm_concat 으로 다른테이블에 있는 항목을 전부 불러와야하는데...

위와 같은 쿼리를 좀 간략하게 만드는 방법 없을까요 속도 빨라지게요 

부탁드립니다.

 

by 마농 [2015.05.26 10:48:34]
SELECT org.org_code
     , org.org_nm
     , org.valid_yn
     , org.rprsntv_nm
     , org.bizrno
     , org.telno
     , org.nation
     , org.law_type
     , org.decipher_type
     , org.report_type
     , org.biz_type
     , org.base_adres
     , org.dtl_adres
     , org.postno
     , org.sub_org_mgmt_yn
     , org.sub_org_type
     , org.apprvl_yn
     , org.apprvl_dt
     , org_amd_no
     , org.up_org_code
     , org.region
     , org.outsrc_org_mgmt_yn
     , org.atch_file_id
     , org.frst_regist_pnttm
     , org.frst_register_id
     , org.last_updt_pnttm
     , org.last_updusr_id
     , org.prmisn_mgmt_yn
     , org.biz_cat
     , org.eng_org_nm
     , null AS is_registed_cnt
     , p.prmisn_se
     , p.dclrt_type
     , pt.type
     , users.last_nm
     , users.first_nm
     , users.email
     , users.mobileno
  FROM org
  LEFT OUTER JOIN agent_mgr am
    ON am.org_code = org.org_code
   AND am.rprsntv_yn = 'Y'
  LEFT OUTER JOIN users
    ON users.esntl_id = am.esntl_id
  LEFT OUTER JOIN
       (SELECT org_code
             , wm_concat(prmisn_se)  AS prmisn_se
             , wm_concat(dclrt_type) AS dclrt_type
          FROM prmisn
         WHERE prmisn_se  IS NOT NULL
            OR dclrt_type IS NOT NULL
         GROUP BY org_code
        ) p
    ON p.org_code = org.org_code
  LEFT OUTER JOIN
       (SELECT org_code
             , wm_concat(type) AS type
          FROM prmisn_type
         GROUP BY org_code
        ) pt
    ON pt.org_code = org.org_code
;

 


by 만년설 [2015.05.26 11:00:39]

감사합니다~

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