[조회 성능 개선하기] 오즈(오주형) 미션 제출합니다.#35
Conversation
jaeseongDev
left a comment
There was a problem hiding this comment.
안녕하세요 오즈~! 리뷰를 맡게 된 제리입니다🐭🐭
바쁜 와중에 미션해주시느라 고생 많으셨어요!!
전체적으로 요구사항을 다 충족시키게 잘 작성해주신 것 같아요:)
SQL 작성에는 요구하는 성능 수치를 맞췄다면, SQL 작성에는 큰 정답이 없다고 생각하기에
제가 남겨놓은 피드백은 한 번 참고해보시면 좋을 것 같애요~!
이제 우테코가 한 달 남짓 남았는데, 오즈하고는 얘기를 많이 못해봐서 너무 아쉽네요ㅠㅠ
다음에 기회가 된다면 같이 얘기나누면서 친해지고 싶네요ㅎㅎㅎㅎ
마지막까지 화이팅입니다!!😄
| ```sql | ||
| SELECT a.사원번호, a.이름, a.연봉, a.직급명, MAX(r.입출입시간) 입출입시간, r.지역, r.입출입구분 | ||
| FROM ( | ||
| SELECT t.사원번호, e.이름, s.연봉, j.직급명 | ||
| FROM (SELECT m.사원번호, m.종료일자 | ||
| FROM 부서관리자 m | ||
| JOIN 부서 d ON m.부서번호 = d.부서번호 | ||
| WHERE 종료일자 >= now() AND 비고 = 'active') t | ||
| JOIN 급여 s ON t.사원번호 = s.사원번호 | ||
| JOIN 사원 e ON t.사원번호 = e.사원번호 | ||
| JOIN 직급 j ON t.사원번호 = j.사원번호 | ||
| WHERE t.종료일자 = s.종료일자 AND t.종료일자 = j.종료일자 | ||
| ORDER BY 연봉 DESC | ||
| LIMIT 5) a | ||
| JOIN 사원출입기록 r ON a.사원번호 = r.사원번호 | ||
| WHERE 입출입구분 = 'O' | ||
| group by 사원번호, 연봉, 직급명, 지역 | ||
| order by 연봉 DESC; | ||
| ``` |
There was a problem hiding this comment.
There was a problem hiding this comment.
처음 서브쿼리 안에 있는 서브쿼리들을 조인으로 바꿨습니다ㅎㅎ
링크 공유해주신 것도 감사합니당!!
SELECT m.사원번호, e.이름, s.연봉, j.직급명, MAX(r.입출입시간) 입출입시간, r.지역, r.입출입구분 FROM 부서관리자 m
JOIN 부서 d ON m.부서번호 = d.부서번호
JOIN 급여 s ON m.사원번호 = s.사원번호
JOIN 사원 e ON m.사원번호 = e.사원번호
JOIN 직급 j ON m.사원번호 = j.사원번호
JOIN 사원출입기록 r ON m.사원번호 = r.사원번호
WHERE m.종료일자 >= now() AND d.비고 = 'active'
AND m.종료일자 = s.종료일자 AND m.종료일자 = j.종료일자
AND r.입출입구분 = 'O'
group by m.사원번호, 연봉, 직급명, 지역
ORDER BY 연봉 DESC;아 그리고 서브쿼리를 최대한 없애보려고 이렇게 하다보니까
limit 5로 연봉 상위 5명을 뽑지 않아도 같은 데이터가 나오더라고요
정확히는 잘 모르겠지만 운좋게 같은 데이터가 뽑히지 않았나 싶어서 그냥 서브쿼리를 추가하더라고
limit 5를 두는 방향으로 수정했습니당
| - 재밌는건 id를 pk로 만들어서 인덱스를 만들어줬는데 rows 값이 달라졌다는거. | ||
| 일단 공식문서에서는 rows는 추정 값이라고 하네요. 여태 테이블 row 수 인줄 알고 있었는데.. | ||
| pk를 추가했을 뿐인데 rows가 달라지는 이유는 정확히는 모르겠습니당.. pk가 추가됨에 따라 탐색하는 수가 달라지기에 그런건가..? | ||
|
|
||
|  | ||
|
|
| ```sql | ||
| SELECT c.id, c.member_id, h.name, p.hobby, p.dev_type, p.years_coding FROM hospital h | ||
| JOIN covid c | ||
| ON h.id = c.hospital_id | ||
| JOIN (SELECT member_id, hobby, dev_type, years_coding FROM programmer | ||
| WHERE hobby = 'Yes' | ||
| AND (student != 'No' OR years_coding = '0-2 years') | ||
| ORDER BY member_id) p | ||
| ON c.member_id = p.member_id; |
There was a problem hiding this comment.
이 부분도 위에 커멘트와 동일하게,
서브쿼리를 사용하지 않고 JOIN으로만 표현해보시면
성능도 좋아지고 코드의 가독성도 좋아질 것 같네요~!
There was a problem hiding this comment.
이것도 마찬가지로 조인으로 수정했습니다!! 그리고 order by는 안해도 되더라고요ㅎㅎ
|
안녕하세요 제리!! |
jaeseongDev
left a comment
There was a problem hiding this comment.
테코톡 때문에 정신없으셨을텐데 고생 진짜 많으셨어요~!
고치신 부분 확인했고 고생 많으셨습니다 :)
내일이 벌써 레벨 4 마무리를 하는 데모데이 날이네요!!
내일 데모데이도 같이 화이팅해요👍👍

안녕하세요 제리!!
잘 지내시나요~~ 날이 많이 추워졌네요
미션 제출이 좀 늦었어요.. 쉽지 않네요 인덱스ㅠㅠ
아직까지도 인덱스에 대해 모르는 부분이 많지만 그래도 쿼리 시간 단축시키는 재미가 있었고
이렇게 튜닝을 하는구나..라고 느꼈던 미션이었습니다!!
여기서 확인하실 수 있습니다
그럼 리뷰 잘 부탁드립니다!! 수고하세요~~!