Skip to content

[조회 성능 개선하기] 오즈(오주형) 미션 제출합니다.#35

Merged
jaeseongDev merged 2 commits intowoowacourse:ohjoohyungfrom
ohjoohyung:step1
Oct 28, 2021
Merged

[조회 성능 개선하기] 오즈(오주형) 미션 제출합니다.#35
jaeseongDev merged 2 commits intowoowacourse:ohjoohyungfrom
ohjoohyung:step1

Conversation

@ohjoohyung
Copy link
Copy Markdown

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

Copy link
Copy Markdown

@jaeseongDev jaeseongDev left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

안녕하세요 오즈~! 리뷰를 맡게 된 제리입니다🐭🐭
바쁜 와중에 미션해주시느라 고생 많으셨어요!!
전체적으로 요구사항을 다 충족시키게 잘 작성해주신 것 같아요:)
SQL 작성에는 요구하는 성능 수치를 맞췄다면, SQL 작성에는 큰 정답이 없다고 생각하기에
제가 남겨놓은 피드백은 한 번 참고해보시면 좋을 것 같애요~!
이제 우테코가 한 달 남짓 남았는데, 오즈하고는 얘기를 많이 못해봐서 너무 아쉽네요ㅠㅠ
다음에 기회가 된다면 같이 얘기나누면서 친해지고 싶네요ㅎㅎㅎㅎ
마지막까지 화이팅입니다!!😄

Comment thread README.md
Comment on lines +18 to +36
```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;
```
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

가능하다면 서브쿼리보다는 JOIN 문을 활용하는 것이 좋다고 얘기를 들은 기억이 나네요~!
CU 강의 중 내용을 일부 재인용하겠습니다~~~
참고해보시면 좋을 것 같애요😄

대부분의 경우 조인문이 서브쿼리 보다 성능이 좋습니다. - 관련링크 1, 관련링크 2
image
MySQL 5.6 이후로 서브쿼리 최적화가 이루어집니다. (SEMI JOIN, MATERIALIZED 등) 다만, 8.0까지도 UPDATE, DELETE 등는 서브쿼리 최적화가 지원되지 않아요. 가능하면 JOIN 을 사용합시다.

Copy link
Copy Markdown
Author

@ohjoohyung ohjoohyung Oct 28, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

처음 서브쿼리 안에 있는 서브쿼리들을 조인으로 바꿨습니다ㅎㅎ
링크 공유해주신 것도 감사합니당!!

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를 두는 방향으로 수정했습니당

Comment thread README.md
Comment on lines +98 to +103
- 재밌는건 id를 pk로 만들어서 인덱스를 만들어줬는데 rows 값이 달라졌다는거.
일단 공식문서에서는 rows는 추정 값이라고 하네요. 여태 테이블 row 수 인줄 알고 있었는데..
pk를 추가했을 뿐인데 rows가 달라지는 이유는 정확히는 모르겠습니당.. pk가 추가됨에 따라 탐색하는 수가 달라지기에 그런건가..?

![image](https://user-images.githubusercontent.com/62014888/137677928-be1108d7-cd21-4267-9627-222ca6937b7f.png)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오오오 신기하네요👍👍
저도 이 부분은 처음 알았네요~!!

Comment thread README.md Outdated
Comment on lines +156 to +164
```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;
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 부분도 위에 커멘트와 동일하게,
서브쿼리를 사용하지 않고 JOIN으로만 표현해보시면
성능도 좋아지고 코드의 가독성도 좋아질 것 같네요~!

Copy link
Copy Markdown
Author

@ohjoohyung ohjoohyung Oct 28, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이것도 마찬가지로 조인으로 수정했습니다!! 그리고 order by는 안해도 되더라고요ㅎㅎ

@ohjoohyung
Copy link
Copy Markdown
Author

안녕하세요 제리!!
빠르게 피드백을 해주셨는데 테코톡 이슈 때문에 이제 리뷰 요청하네요..ㅠㅠ
바쁘실텐데 천천히 리뷰 주셔도 됩니다!! 이번에도 잘부탁드립니다~~!!

Copy link
Copy Markdown

@jaeseongDev jaeseongDev left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

테코톡 때문에 정신없으셨을텐데 고생 진짜 많으셨어요~!
고치신 부분 확인했고 고생 많으셨습니다 :)
내일이 벌써 레벨 4 마무리를 하는 데모데이 날이네요!!
내일 데모데이도 같이 화이팅해요👍👍

@jaeseongDev jaeseongDev merged commit fd08862 into woowacourse:ohjoohyung Oct 28, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants