코딩테스트/MySQL
[프로그래머스 Level 2] 연도별 대장균 크기의 편차 구하기(MySQL) .Feat 스칼라 서브쿼리 성능 개선
최-코드
2024. 6. 26. 19:55
코딩테스트 연습 - 연도별 대장균 크기의 편차 구하기 | 프로그래머스 스쿨 (programmers.co.kr)
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
스칼라 서브쿼리는 메인 쿼리가 실행되고 한 행에 대해 스칼라 서브쿼리가 실행되기 때문에, 메인 쿼리에서 조회하는 행이 많으면 성능이 현저히 떨어지게 된다.
SELECT YEAR(D.DIFFERENTIATION_DATE) AS YEAR, (SELECT MAX(E.SIZE_OF_COLONY) FROM ECOLI_DATA AS E WHERE YEAR(E.DIFFERENTIATION_DATE) = YEAR(D.DIFFERENTIATION_DATE))-D.SIZE_OF_COLONY AS YEAR_DEV, D.ID
FROM ECOLI_DATA AS D
ORDER BY YEAR, YEAR_DEV
따라서 LEFT OUTER JOIN에 인라인 뷰를 통해 성능 저하를 해결할 수 있다.
이는 서브쿼리를 한 번만 실행시키는 효과가 있기 때문이다.
SELECT YEAR(D.DIFFERENTIATION_DATE) AS YEAR, F.MV-D.SIZE_OF_COLONY AS YEAR_DEV, D.ID
FROM ECOLI_DATA AS D LEFT OUTER JOIN (
SELECT YEAR(E.DIFFERENTIATION_DATE) AS YEAR, MAX(E.SIZE_OF_COLONY) AS MV
FROM ECOLI_DATA AS E
GROUP BY YEAR(E.DIFFERENTIATION_DATE)
) AS F
ON YEAR(D.DIFFERENTIATION_DATE) = F.YEAR
ORDER BY YEAR, YEAR_DEV