Background Image

FORUM

2023.06.30 17:02

조회쿼리 시간단축

조회 수 98 추천 수 0 댓글 1
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄


* 질문 등록 시 다음의 내용을 꼭 기입하여 주세요.

OS
Window7 32bit, Linux 64bit 등
CUBRID Ver.
[cubrid_rel] 수행 결과
CUBRID TOOL Ver.
[도움말]-[버전정보] 확인
응용 환경(API)
java, php, odbc 등 입력


* CUBRID 응용 오류, SQL 오류 또는 SQL 튜닝 관련된 문의는 반드시 다음의 내용을 추가해 주세요. 비밀글이나 비밀 댓글도 가능합니다.
* 저희가 상황을 이해하고, 재현이 가능해야 알 수 있는 문제들이 많습니다. 가능한 정보/정황들을 부탁합니다.

 

에러 내용 및 재현 방법 재현 가능한 Source와 SQL
관련 테이블(인덱스, 키정보 포함) 정보 CUBRID 홈 디렉토리 아래 log 디렉토리 압축


-------------- 아래에 질문 사항을 기입해 주세요. ------------------------------------------------------------------------
아래의 조회 쿼리에서  개선할 방법좀 알려주세요

esfcckhd테이블 데이터 약 10만건

 

빨간색 쿼리 a테이블 조회건수 약29000건 11초

주황색 쿼리 x테이블 조회건수 약29000건 11초

하늘색 쿼리 y테이블 조회건수 약 1,460,000건 cross join 사용으로 데이터 증가  약 940초

전체 쿼리 조회시 약 105초 

 

전체를 조회하면 시간이 105초인데  y부분까지만 조회하면 시간이 늘어나는데 cross 조인 때문에 그런건가요?

시간을 단축시켜야하는데 솔루션 부탁드립니다.

 

  SELECT DISTINCT *
          FROM (SELECT t.SYS_ID
                      ,t.CK_NO                      /* 점검번호 */
                      ,t.MOD_LOG_CNT                /* 수정이력 회차 */
                      ,t.PERIOD_AUTO_RULE
                      ,u.IN_YR                      /* 년도 */
                      ,u.IN_MM                      /* 월 */
                      ,u.YR_WK                      /* 주차 */
                      ,u.SC_DATE                    /* 계획일자 */
                      ,t.DEFAULT_TYPE
                      ,CASE WHEN t.PERIOD_AUTO_RULE = 'D001' THEN TO_CHAR(TO_DATE(t.SC_DATE, 'YYYYMMDD')-1, 'YYYYMMDD')
                            WHEN t.PERIOD_AUTO_RULE = 'D002' THEN TO_CHAR(TO_DATE(t.SC_DATE, 'YYYYMMDD')-2, 'YYYYMMDD')
                            WHEN t.PERIOD_AUTO_RULE = 'D003' THEN TO_CHAR(TO_DATE(t.SC_DATE, 'YYYYMMDD')-3, 'YYYYMMDD')
                            WHEN t.PERIOD_AUTO_RULE = 'D005' THEN TO_CHAR(TO_DATE(t.SC_DATE, 'YYYYMMDD')-5, 'YYYYMMDD')
                            WHEN t.PERIOD_AUTO_RULE = 'D007' THEN TO_CHAR(TO_DATE(t.SC_DATE, 'YYYYMMDD')-7, 'YYYYMMDD')
                            WHEN t.PERIOD_AUTO_RULE = 'D014' THEN TO_CHAR(TO_DATE(t.SC_DATE, 'YYYYMMDD')-14, 'YYYYMMDD')
                            WHEN t.PERIOD_AUTO_RULE = 'D021' THEN TO_CHAR(TO_DATE(t.SC_DATE, 'YYYYMMDD')-21, 'YYYYMMDD')
                            WHEN t.PERIOD_AUTO_RULE = 'M001' THEN TO_CHAR(ADD_MONTHS(TO_DATE(t.SC_DATE, 'YYYYMMDD'), -1), 'YYYYMMDD')
                            WHEN t.PERIOD_AUTO_RULE = 'M002' THEN TO_CHAR(ADD_MONTHS(TO_DATE(t.SC_DATE, 'YYYYMMDD'), -2), 'YYYYMMDD')
                            WHEN t.PERIOD_AUTO_RULE = 'M003' THEN TO_CHAR(ADD_MONTHS(TO_DATE(t.SC_DATE, 'YYYYMMDD'), -3), 'YYYYMMDD')
                            WHEN t.PERIOD_AUTO_RULE = 'M006' THEN TO_CHAR(ADD_MONTHS(TO_DATE(t.SC_DATE, 'YYYYMMDD'), -6), 'YYYYMMDD')
                            WHEN t.PERIOD_AUTO_RULE = 'M009' THEN TO_CHAR(ADD_MONTHS(TO_DATE(t.SC_DATE, 'YYYYMMDD'), -9), 'YYYYMMDD')
                            WHEN t.PERIOD_AUTO_RULE = 'Y001' THEN TO_CHAR(ADD_MONTHS(TO_DATE(t.SC_DATE, 'YYYYMMDD'), -12), 'YYYYMMDD')
                            WHEN t.PERIOD_AUTO_RULE = 'Y002' THEN TO_CHAR(ADD_MONTHS(TO_DATE(t.SC_DATE, 'YYYYMMDD'), -24), 'YYYYMMDD')
                            WHEN t.PERIOD_AUTO_RULE = 'Y003' THEN TO_CHAR(ADD_MONTHS(TO_DATE(t.SC_DATE, 'YYYYMMDD'), -36), 'YYYYMMDD')
                            WHEN t.PERIOD_AUTO_RULE = 'Y004' THEN TO_CHAR(ADD_MONTHS(TO_DATE(t.SC_DATE, 'YYYYMMDD'), -48), 'YYYYMMDD')
                            WHEN t.PERIOD_AUTO_RULE = 'Y005' THEN TO_CHAR(ADD_MONTHS(TO_DATE(t.SC_DATE, 'YYYYMMDD'), -60), 'YYYYMMDD')
                            ELSE t.SC_DATE
                       END CREATE_DT
                  FROM (SELECT y.*
                              ,CASE WHEN y.PERIOD_TYP = 'D' OR y.PERIOD_CRE_RULE = '0' THEN s1.SC_DATE
                                    WHEN y.PERIOD_TYP = 'WK' THEN
                                         CASE WHEN y.PERIOD_CRE_RULE = '1' AND NVL(y.PERIOD_DAY, '') != '' THEN s2.SC_DATE
                                              ELSE s1.SC_DATE
                                         END
                                    ELSE CASE WHEN y.PERIOD_CRE_RULE = '1' AND  NVL(y.PERIOD_DAY, '') != '' AND NVL(y.PERIOD_WK, '') != '' THEN s3.SC_DATE
                                              ELSE s1.SC_DATE
                                         END
                               END SC_DATE
                          FROM (SELECT x.*
                                      ,TO_DATE(x.DEFAULT_DATE, 'YYYYMMDD') DEFAULT_DATE2
                                      ,CASE WHEN x.DEFAULT_TYPE = 'A' THEN -1 ELSE 0 END DEFAULT_CHECK
                                      ,(ABS(TO_NUMBER(TO_CHAR(SYSDATE, 'YYYY'))-TO_NUMBER(TO_CHAR(TO_DATE(x.DEFAULT_DATE, 'YYYYMMDD'), 'YYYY'))) +3) *
                                       CASE WHEN x.PERIOD_TYP = 'WK' THEN (53 / x.PERIOD_CYCLE)
                                            WHEN x.PERIOD_TYP = 'MON' THEN (12 / x.PERIOD_CYCLE)
                                            WHEN x.PERIOD_TYP = 'QRT' THEN 5
                                            WHEN x.PERIOD_TYP = 'HLF' THEN 3
                                            WHEN x.PERIOD_TYP = 'YR' THEN x.PERIOD_CYCLE
                                            WHEN x.PERIOD_TYP = 'D' THEN (365/x.PERIOD_CYCLE)
                                       END INTERVAL_CNT
                                  FROM (SELECT a.SYS_ID
                                              ,a.CK_NO
                                              ,a.MOD_LOG_CNT
                                              ,a.PERIOD_CRE_RULE
                                              ,a.PERIOD_CYCLE
                                              ,a.PERIOD_TYP
                                              ,a.PERIOD_AUTO_RULE
                                              ,CASE WHEN a.PERIOD_TYP = 'D' THEN a.PERIOD_CYCLE
                                                    WHEN a.PERIOD_TYP = 'WK' THEN 7*a.PERIOD_CYCLE
                                                    WHEN a.PERIOD_TYP = 'MON' THEN
                                                         CASE WHEN  a.PERIOD_CRE_RULE = '1' THEN a.PERIOD_CYCLE
                                                              ELSE 30*a.PERIOD_CYCLE
                                                         END
                                                    WHEN a.PERIOD_TYP = 'QRT' THEN
                                                         CASE WHEN  a.PERIOD_CRE_RULE = '1' THEN 3
                                                              ELSE 90*a.PERIOD_CYCLE
                                                         END
                                                    WHEN a.PERIOD_TYP = 'HLF' THEN
                                                         CASE WHEN  a.PERIOD_CRE_RULE = '1' THEN 6
                                                              ELSE 180*a.PERIOD_CYCLE
                                                         END
                                                    WHEN a.PERIOD_TYP = 'YR' THEN
                                                         CASE WHEN  a.PERIOD_CRE_RULE = '1' THEN 12*a.PERIOD_CYCLE
                                                              ELSE 360*a.PERIOD_CYCLE
                                                         END
                                               END P_DAY
                                              ,NVL((SELECT CASE WHEN MAX(s1.PLAN_DATE) IS NULL OR MAX(s1.PLAN_DATE) < a.PERIOD_BAS_DATE THEN a.PERIOD_BAS_DATE
                                                                ELSE MAX(s1.PLAN_DATE)
                                                           END
                                                      FROM ESFCCKSC s1
                                                     WHERE s1.SYS_ID = a.SYS_ID
                                                       AND s1.STS IN ('C', 'U')
                                                       AND s1.CK_NO = a.CK_NO), a.PERIOD_BAS_DATE) DEFAULT_DATE
                                              ,NVL((SELECT CASE WHEN MAX(s1.PLAN_DATE) IS NULL OR MAX(s1.PLAN_DATE) < a.PERIOD_BAS_DATE THEN 'A'
                                                                ELSE 'B'
                                                           END
                                                      FROM ESFCCKSC s1
                                                     WHERE s1.SYS_ID = a.SYS_ID
                                                       AND s1.STS IN ('C', 'U')
                                                       AND s1.CK_NO = a.CK_NO), 'A') DEFAULT_TYPE
                                              ,a.PERIOD_WK
                                              ,CASE WHEN a.PERIOD_DAY = '1' THEN '2'
                                                    WHEN a.PERIOD_DAY = '2' THEN '3'
                                                    WHEN a.PERIOD_DAY = '3' THEN '4'
                                                    WHEN a.PERIOD_DAY = '4' THEN '5'
                                                    WHEN a.PERIOD_DAY = '5' THEN '6'
                                                    WHEN a.PERIOD_DAY = '6' THEN '7'
                                                    WHEN a.PERIOD_DAY = '7' THEN '1'
                                               END PERIOD_DAY /* 요일 보정 */
                                          FROM ESFCCKHD a
                                         WHERE a.SYS_ID = 'IIAC'
                                           AND a.NEW_YN = 'Y'
                                           AND a.MASTER_STS = 'USY'
                                           AND a.CK_TYP = 'DAI'
                                           AND a.STS IN ('C', 'U')

                                           --AND a.PERIOD_TYP IN ('WK', 'MON', 'QRT', 'HLF', 'YR')
                                         
                                       ) x) y
                    CROSS JOIN (SELECT LEVEL LVL
                                  FROM DB_ROOT
                                CONNECT BY LEVEL < y.INTERVAL_CNT) z
               LEFT OUTER JOIN ESFCSCDT s1
                            ON s1.SYS_ID = y.SYS_ID
                           --AND s1.IN_YR  = TO_CHAR(SYSDATE, 'YYYY')
                           AND s1.SC_DATE = CASE WHEN y.PERIOD_CRE_RULE = '1' AND y.PERIOD_TYP IN ('MON', 'QRT', 'HLF', 'YR') AND y.PERIOD_WK > '' AND y.PERIOD_DAY > '' THEN NULL
                                                 WHEN y.PERIOD_CRE_RULE = '1' AND y.PERIOD_TYP IN ('MON', 'QRT', 'HLF', 'YR') AND (NVL(y.PERIOD_WK, '') = '' OR NVL(y.PERIOD_DAY, '') = '') THEN
                                                      TO_CHAR(ADD_MONTHS(y.DEFAULT_DATE2, (y.P_DAY * (z.LVL+y.DEFAULT_CHECK))), 'YYYYMMDD')
                                                 ELSE TO_CHAR(y.DEFAULT_DATE2 + (y.P_DAY * (z.LVL+y.DEFAULT_CHECK)), 'YYYYMMDD')
                                            END
               LEFT OUTER JOIN ESFCSCDT s2
                            ON s2.SYS_ID  = y.SYS_ID
                           AND s2.YR_WK  = s1.YR_WK
                           AND s2.IN_YR  = s1.IN_YR
                           --AND s2.IN_YR  = TO_CHAR(SYSDATE, 'YYYY')
                           AND s2.DAY_WK = y.PERIOD_DAY
               LEFT OUTER JOIN ESFCSCDT s3
                            ON s3.SYS_ID  = y.SYS_ID
                           AND s3.IN_YR  = CASE WHEN y.PERIOD_TYP IN ('MON', 'QRT', 'HLF', 'YR') AND y.PERIOD_CRE_RULE = '1' AND y.PERIOD_WK > '' AND y.PERIOD_DAY > '' THEN
                                                     TO_CHAR(ADD_MONTHS(y.DEFAULT_DATE2, (y.P_DAY * (z.LVL+y.DEFAULT_CHECK))), 'YYYY')
                                                ELSE NULL
                                           END
                           AND s3.IN_MM  = TO_CHAR(ADD_MONTHS(y.DEFAULT_DATE2, (y.P_DAY * (z.LVL+y.DEFAULT_CHECK))), 'MM')
                           --AND s3.IN_YR  = TO_CHAR(SYSDATE, 'YYYY')
                           AND s3.DAY_WK = y.PERIOD_DAY
                           AND s3.MM_WK  = y.PERIOD_WK
                         WHERE CASE WHEN y.PERIOD_TYP = 'D' THEN s1.SC_DATE
                                    WHEN y.PERIOD_TYP = 'WK' THEN
                                         CASE WHEN y.PERIOD_CRE_RULE = '1' AND NVL(y.PERIOD_DAY, '') != '' THEN s2.SC_DATE
                                              ELSE s1.SC_DATE
                                         END
                                    ELSE CASE WHEN y.PERIOD_CRE_RULE = '1' AND  NVL(y.PERIOD_DAY, '') != '' AND NVL(y.PERIOD_WK, '') != '' THEN s3.SC_DATE
                                              ELSE s1.SC_DATE
                                    END
                               END IS NOT NULL) t
            INNER JOIN ESFCSCDT u
                    ON u.SYS_ID = 'IIAC'
                   AND u.SC_DATE = t.SC_DATE
                   AND u.SC_DATE >= t.DEFAULT_DATE) q
         
         WHERE '1' = CASE WHEN q.DEFAULT_TYPE = 'A' AND q.CREATE_DT <= TO_CHAR(SYSDATE, 'YYYYMMDD') THEN '1'
                          WHEN q.DEFAULT_TYPE = 'B' AND q.CREATE_DT = TO_CHAR(SYSDATE, 'YYYYMMDD') THEN '1'
                          ELSE '2'
                     END
             
           AND NOT EXISTS (SELECT 1
                             FROM ESFCCKSC s1
                            WHERE s1.SYS_ID = q.SYS_ID
                              AND s1.CK_NO  = q.CK_NO
                              AND s1.FST_PLAN_DATE = q.SC_DATE
                              AND s1.STS IN ('C', 'U'))

 

TAG •
  • ?
    엄기호 2023.07.03 16:42
    큐브리드를 이용해주셔서 감사합니다.

    회원님의 질문은 쿼리문에 대한 튜닝 관련 내용이므로 Q&A로 정확하게 알 수 없으므로 지원하기 어렵습니다.
    쿼리문에 대한 튜닝은 저희와 서비스 계약된 고객인 경우 기술본부 엔지니어 담당자에게 문의 해주시길 부탁드립니다.
    또한 서비스 계약이 아닌 고객인 경우 사업본부에 문의부탁드립니다.

List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 CUBRID 사용자를 위한 DBeaver 도구 출시 안내 admin 2024.04.23 51
공지 SQLGate for CUBRID 영구 무료 라이선스 제공 file admin 2020.04.09 4458
3874 운영db 접근이 되지 않아 문의 드립니다 1 file 찬이 2023.07.20 99
3873 홈경로 databases.txt 질문드립니다 1 큐브리드드 2023.07.17 92
3872 Cubrid admin 접속 제한 문의드립니다. 2 데굴v 2023.07.13 118
3871 특정단어 삭제 6 ddmmdd 2023.07.13 165
3870 error while loading shared libraries: libncurses.so.5 에러 문의 드립니다. 3 kikiki767 2023.07.10 1471
3869 다운로드페이지에 CUBRIDManager 11.x windows-x64.exe 는 없는데 .. 다운로드 할 수 있을까요? 2 최라이거 2023.07.05 310
3868 db_class에서 테이블 목록 조회시 2 cncn 2023.07.03 295
» 조회쿼리 시간단축 1 leeee 2023.06.30 98
3866 CUBRID 8.4.4 -> 11.0.3 로 업그레이드 시 발생할 문제가 있을까요? 1 SDDC사업개발자 2023.06.29 89
3865 CUBRID to Tibero DBLink지원 가능한지 알고싶습니다. 1 공공기관에서사용중1 2023.06.28 139
3864 ELO타입이 무엇인가요? 1 sobubble 2023.06.27 116
3863 백업파일 받았는데 복구하는 방법을 모르겠습니다. 4 Ggyak 2023.06.20 186
3862 UTF8 한글이 깨짐 4 file yonggi 2023.06.19 271
3861 저장 프로스저에 있는 함수 상세보기 문의입니다. 1 대출인생30년 2023.06.12 82
3860 MERGE INTO 속도 개선 문의 1 leeee 2023.06.12 129
3859 NX_transcation 1 yoo 2023.06.12 79
3858 cubrid cursor.close() 에러 관련질문 3 힘내자화이팅 2023.06.08 186
3857 merge 쿼리 속도개선 2 leeee 2023.06.08 109
3856 브로커(CAS)수 질문드립니다! 8 요시니 2023.06.05 152
3855 데이터 이관 문의입니다. 1 kipo0821 2023.05.30 129
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 ... 200 Next
/ 200

Contact Cubrid

대표전화 070-4077-2110 / 기술문의 070-4077-2113 / 영업문의 070-4077-2112 / Email. contact_at_cubrid.com
Contact Sales