서브쿼리 사용시 성능이 매우 저하됩니다. 0 1 1,990

by 제일 [2013.03.27 15:08:49]


명확한 해답을 구하는 것이 아닙니다.
주어진 환경에 따라 성능이 천차만별이란걸 알고 있으니까요.
그래도 여러분께서 다음 글을 읽어주시고 의심되는 부분이라도 말씀해주셨으면 합니다.


SELECT
(
    SELECT ROUND(MAX(M1_VAL) * 100 / MAX(M2_VAL),1) PERC
      FROM (SELECT MONTHS, COUNT(PEOPLE) M1_VAL, NULL M2_VAL FROM (SELECT '1' PEOPLE, '201201' MONTHS FROM DUAL)
              UNION ALL
            SELECT MONTHS, NULL M1_VAL, COUNT(PEOPLE) M2_VAL FROM (SELECT '2' PEOPLE, '201201' MONTHS FROM DUAL)
            )      
     WHERE MONTHS = A.YYMM
) VAL1
FROM (SELECT '201201' YYMM FROM DUAL) A --달력테이블

위와 같은 구조의 쿼리가 있었습니다.
그런데 이 쿼리의 조회시간은 2초 가량 돌게 되어있더군요.
그런데 서브쿼리의 'WHERE MONTHS = A.YYMM' 부분을 빼면 0.2초로 팍 줄어버립니다.
실제 제가 사용하고 있는 쿼리에서도 UNION ALL까지의 속도는 0.15초정도이나 메인쿼리 테이블의 컬럼과 조인되는순간
성능이 엄청나게 저하 되는 것을 확인했습니다.

제가 원하는 방식은 서브 쿼리의 있는 월정보와을
달력정보가 있는 달력테이블 A의 월정보를 조인시켜서
서브쿼리의 결과를 월별로 나타내고 싶습니다. 표현은 되기는 하지만 어째서 조인하나 걸었을 뿐인데
성능이 10배 가량 저하가 되는지 이해가 안되서 이렇게 글을 쓰게 되었습니다.


by 마농 [2013.03.27 16:30:56]

우선 실행계획을 살펴보시구요.
원본 쿼리를 볼 수 있었으면 좋겠네요.

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