Inflearn brand logo image

인프런 커뮤니티 질문&답변

chaelynjang님의 프로필 이미지
chaelynjang

작성한 질문수

비전공자도 이해할 수 있는 MySQL 성능 최적화 입문/실전 (SQL 튜닝편)

[실습] 2024년 1학기 평균 성적이 100점인 학생 조회하는 SQL문 튜닝하기

쿼리 튜닝 관련 질문 (limit)

작성

·

81

0

안녕하세요 강사님 좋은 강의 정말 감사드립니다. 실습 따라면서 튜닝을 익혀가고있는데 이번 강의에서 이해되지 않는 부분이 있어 질문 남깁니다.

일단 저는 MariaDB를 이용하여 실습을 하고 있습니다 죄송합니다 ㅠ

-- 튜닝 전 쿼리
SELECT st.student_id, st.name, AVG(sc.score) AS average_score
FROM students st 
JOIN scores sc ON st.student_id = sc.student_id
GROUP BY
st.student_id, st.name, sc.year, sc.semester
HAVING
AVG(sc.score)=100
AND sc.year=2024
AND sc.semester=1;

-- 튜닝 쿼리
SELECT st.student_id, st.name, AVG(sc.score) AS average_score
FROM students st
JOIN scores sc ON st.student_id = sc.student_id
WHERE sc.year=2024
AND sc.semester=1
GROUP BY
st.student_id, st.name, sc.year, sc.semester
HAVING
AVG(sc.score)=100;

두 쿼리 실행 속도에 별로 차이가 없어서
1) students, scores 두 테이블 각각 데이터 300만개로 늘리고

2) 두 쿼리 모두 동일하게 limit 10을
붙여줬더니 갑자기 성능 차이가 엄청나게 났습니다.

-- 튜닝 전 쿼리
SELECT st.student_id, st.name, AVG(sc.score) AS average_score
FROM students st 
JOIN scores sc ON st.student_id = sc.student_id
GROUP BY
st.student_id, st.name, sc.year, sc.semester
HAVING
AVG(sc.score)=100
AND sc.year=2024
AND sc.semester=1
LIMIT 10;

-- 튜닝 쿼리
SELECT st.student_id, st.name, AVG(sc.score) AS average_score
FROM students st
JOIN scores sc ON st.student_id = sc.student_id
WHERE sc.year=2024
AND sc.semester=1
GROUP BY
st.student_id, st.name, sc.year, sc.semester
HAVING
AVG(sc.score)=100 
limit 10;


제가 궁금한 것은 limit 10을 붙이면 튜닝을 하든 안하든 실행 속도가 더 줄어들어야 할 것 같은데 튜닝 전 쿼리가 갑자기 1분넘게 소요되더라고요.
튜닝 후 쿼리는 limit을 붙이나 안붙이나 별 차이가 없는데 튜닝 전 쿼리는 왜 limit을 붙이면 갑자기 성능이 엄청나게 저하되는걸까요..??

 

확인해주시고 답변 주시면 많은 도움 될 것 같습니다 감사합니다!

답변 1

0

JSCODE 박재성님의 프로필 이미지
JSCODE 박재성
지식공유자

안녕하세요 chaelynjang님! 강의 잘 봐주셔서 감사합니다:)

질문 내용이 아주 흥미롭고 저도 이유가 궁금하네요!

같이 쿼리문 분석 도와드리기 위해 아래 카톡 링크로

실행 계획 결과(EXPLAIN)와 실행 세부 계획(EXPLAIN ANALYZE) 결과값

캡쳐해서 보내주실 수 있을까요~??

https://open.kakao.com/o/sDPmGYzg

chaelynjang님의 프로필 이미지
chaelynjang

작성한 질문수

질문하기