안녕하세요
아래와 같은 쿼리를 작성했습니다.
SELECT B.bl_id, A.name, A.coord_x, A.coord_y ,B.com200_campus as cp_cd FROM AFM.BL A, (SELECT DISTINCT D.bl_id, E.com200_campus FROM (SELECT A.bl_id, A.fl_id, A.rm_id FROM afm.rm A, com200tl B, afm.bl C WHERE A.lectur_use = '수업' AND C.bl_id = B.com200_bl_id AND A.bl_id = B.com200_bl_id AND A.fl_id = B.com200_fl_id AND A.rm_id = B.com200_rm_id AND B.com200_campus = '11' <여기부터> or com200_campus = '12' or com200_campus = '13'<여기까지> MINUS SELECT D.bl_id, D.fl_id, D.rm_id FROM AFM.RM_RESERVE D WHERE STATUS = 'Con' AND TO_CHAR( TIME_START, 'YYYYMMDDHH24MISS') >= :time_start AND TO_CHAR( time_end, 'YYYYMMDDHH24MISS') <= :time_end )D, com200tl E where com200_campus = '11' <여기부터>or com200_campus = '12' or com200_campus = '13'<여기까지> ) B WHERE A.bl_id = B.BL_ID order by cp_cd asc, name asc
위 쿼리의 노란칠 부분을 제거하면 실행시간이 약 10초내외인데
저 노란부분을 첨가하면 2분이 지나도 계속 돌아갑니다.
저부분이 number타입이면 부등호로 하면될텐데 char타입이라 부등호 사용도 못하네요 ㅜㅜ
위 쿼리문의 속도 향상 방법이 있을까요?
조언 부탁드립니다.
** 노란칠 부분이라고 적은곳 html태그 적용이 안되어 <여기부터> 로 바꿧습니다
일단은
SELECT B.BL_ID , A.NAME , A.COORD_X , A.COORD_Y , E.COM200_CAMPUS AS CP_CD FROM AFM.BL A , (SELECT DISTINCT D.BL_ID FROM (SELECT A.BL_ID, A.FL_ID, A.RM_ID FROM AFM.RM A, COM200TL B, AFM.BL C WHERE A.LECTUR_USE = '수업' AND C.BL_ID = B.COM200_BL_ID AND A.BL_ID = B.COM200_BL_ID AND A.FL_ID = B.COM200_FL_ID AND A.RM_ID = B.COM200_RM_ID AND (B.COM200_CAMPUS = '11'--괄호 추가 OR B.COM200_CAMPUS = '12' OR B.COM200_CAMPUS = '13') MINUS SELECT D.BL_ID, D.FL_ID, D.RM_ID FROM AFM.RM_RESERVE D WHERE STATUS = 'Con' --AND TO_CHAR(TIME_START, 'YYYYMMDDHH24MISS') >= :TIME_START -- 컬럼변형금지 --AND TO_CHAR(TIME_END, 'YYYYMMDDHH24MISS') <= :TIME_END AND TIME_START >= TO_DATE(:TIME_START,'YYYYMMDDHH24MISS') AND TIME_END <= TO_DATE(:TIME_END,'YYYYMMDDHH24MISS') ) D ) B ,(SELECT DECODE(LEVEL,1,'11',2,'12',3,'13') COM200_CAMPUS FROM DUAL CONNECT BY LEVEL <= 3) E -- 행복제 의도하신 것 같아 바깥으로 빼고 DUAL로 행복제 WHERE A.BL_ID = B.BL_ID ORDER BY CP_CD ASC, NAME ASC
이렇게 해보시고 효과 없으면 다시 고민해 봅시당.
추가) 다시 보니 결정적으로 OR 조건에 괄호를 안 넣으셨네요ㅎㅎ