by 엔케이 [SQL Query] 오라클 두번째 속도 between [2016.08.09 17:53:21]
안녕하세요
쿼리에 대해 많은정보만 얻어가다가 처음질문드립니다.
SELECT * FROM (SELECT V.* , ROW_NUMBER() OVER(ORDER BY MAKEDATE DESC) AS RNUM FROM ( SELECT A.VIDEO_VIDEOGBN ||'_'|| A.VIDEO_VIDEOID ||'_'|| B.CLIP_VIDEODTL AS PK , B.CLIP_SUBJECT AS TITLE , NVL(DECODE(TRIM(A.VIDEO_MAKEDATE), '', '19000101'), '19000101') AS MAKEDATE , ROUND((B.CLIP_CLIPEND - B.CLIP_CLIPSTART)/1000) AS PLAY_TIME , TO_CHAR(A.INSERT_DATE, 'YYYY-MM-DD') AS INSERT_DATE FROM MAST_VIDEO_HEAD A LEFT OUTER JOIN MAST_VIDEO_TAIL B ON A.VIDEO_VIDEOSRCGBN = B.VIDEO_VIDEOSRCGBN AND A.VIDEO_VIDEOGBN = B.CLIP_VIDEOGBN AND A.VIDEO_VIDEOID = B.VIDEO_VIDEOID AND B.CLIP_USEGBN = 'Y' AND A.VIDEO_USEGBN='Y' WHERE A.VIDEO_VIDEOSRCGBN = 'KV' AND A.VIDEO_VIDEOGBN IN ('DH','DP','DK','DT','MH') AND B.CLIP_VIDEODTL > 0 ) V ) WHERE RNUM BETWEEN 1 AND 10 ;
위의 쿼리를 실행시에는 1초 이내에 실행이 됩니다.
첫번째는 빠르고 두번째 부터는 30초씩 시간이 소요됩니다.
BETWEEN 문장을 빼면 바로바로 결과가 출력됩니다.
하지만 페이징 기능구현을 위해서 뺄수는 없는데
이런경우는 처음이라 질문드립니다.
증상을 보이는 DB의 데이터를 덤프떠서 새로운계정에(테이블스페이스도변경) 임포트 했습니다.
새로운 계정도 동일한 증상을 보입니다. ㅠ
다른서버 (개발환경)에 임포트 했습니다. 새로운 환경에서는 속도저하없이 바로바로 결과가 출력됩니다.
설정의 차이같은데 모르겠습니다. ㅠㅠ
도움부탁드리겠습니다.
혹시 원하시는 결과가 이거 아닌가요?
SELECT * FROM ( SELECT PK, TITLE, MAKEDATE, PLAY_TIME, INSERT_DATE, ROWNUM AS RNUM FROM ( SELECT A.VIDEO_VIDEOGBN ||'_'|| A.VIDEO_VIDEOID ||'_'|| B.CLIP_VIDEODTL AS PK , B.CLIP_SUBJECT AS TITLE , NVL(DECODE(TRIM(A.VIDEO_MAKEDATE), '', '19000101'), '19000101') AS MAKEDATE , ROUND((B.CLIP_CLIPEND - B.CLIP_CLIPSTART)/1000) AS PLAY_TIME , TO_CHAR(A.INSERT_DATE, 'YYYY-MM-DD') AS INSERT_DATE FROM MAST_VIDEO_HEAD A LEFT OUTER JOIN MAST_VIDEO_TAIL B ON A.VIDEO_VIDEOSRCGBN = B.VIDEO_VIDEOSRCGBN AND A.VIDEO_VIDEOGBN = B.CLIP_VIDEOGBN AND A.VIDEO_VIDEOID = B.VIDEO_VIDEOID AND B.CLIP_USEGBN = 'Y' AND A.VIDEO_USEGBN='Y' WHERE A.VIDEO_VIDEOSRCGBN = 'KV' AND A.VIDEO_VIDEOGBN IN ('DH','DP','DK','DT','MH') AND B.CLIP_VIDEODTL > 0 ORDER BY MAKEDATE DESC ) V WHERE ROWNUM < 10 ) WHERE RNUM >= 1 ;