db basic _ 성능개선

29
DB Basic 성능개선을 해보자! 이영남 F : facebook.com/utopianami M : [email protected]

Upload: youngnam-lee

Post on 26-May-2015

176 views

Category:

Software


1 download

TRANSCRIPT

Page 1: DB Basic _ 성능개선

DB Basic 성능개선을 해보자!

이영남 F : facebook.com/utopianami M : [email protected]

Page 2: DB Basic _ 성능개선

수업시간…

Page 3: DB Basic _ 성능개선

[수업자료 중 일부]

Page 4: DB Basic _ 성능개선

이제 쿼리 배웠는데…. 나~중에 쓰겠지!!

Page 5: DB Basic _ 성능개선

3일 뒤……돌아가지 않는다.

Page 6: DB Basic _ 성능개선

하려고 했던 것은?

글을 스크랩하면 그 글에서 단어만 뽑기

1. DB에 저장된 단어에서 위 단어는 몇번 나오는가? 2. 카테고리를 기준으로 각 카테고리에서 위 단어는 몇번 나오는가?

Page 7: DB Basic _ 성능개선

단어 글 번호 카테고리데이터베이스 1 정치유토피아 1 정치데이터베이스 2 IT메시 3 스포츠

메시

데이터베이스

만점

분석중인 단어 DB에 저장된 단어

예를 들면

Page 8: DB Basic _ 성능개선

!!1번 요구사항 결과 {메시 : 1}, {데이터베이스 : 2}, {만점 : 0}

2번 요구사항 결과 : { 정치 : {메시 : 0}, {데이터베이스 : 1}, {만점 : 0} }, { IT : {메시 : 0}, {데이터베이스 : 1}, {만점 : 0} }, { 스포츠 : {메시 : 1}, {데이터베이스 : 0}, {만점 : 0} },

예상결과는

Page 9: DB Basic _ 성능개선

Query

- learning_set : 미리 저장해 둔 단어 - article 글을 저장해둔 테이블 - word : article의 단어를 저장해둔 테이블

Page 10: DB Basic _ 성능개선

Query

쉽게 쉽게 생각해서 !1. url을 통해서 aid를 찾고, 2. 그 aid의 단어 리스트를 뽑고, 3. 미리 저장한 learning_set에서 단어리스트만 뽑아서, 4. group by 해서 count!

Page 11: DB Basic _ 성능개선

결과는

BYE BYE

Page 12: DB Basic _ 성능개선

왜? 처음엔 잘 되었는데, 데이터를 22만개 정도 넣으니… !

Page 13: DB Basic _ 성능개선

Explain

Page 14: DB Basic _ 성능개선

!Point

Page 15: DB Basic _ 성능개선

Point

Dependent subquery는!무조건 없애야 해요.!

229390 x 229390 = ?

Page 16: DB Basic _ 성능개선

개선서브쿼리를 조인으로!

Page 17: DB Basic _ 성능개선

개선

229390 x 229390 = ?

229390!!!

Page 18: DB Basic _ 성능개선

추가개선

1. Index !!!!2. length!

- `learning_set`테이블의 `word`컬럼에 인덱스 - INSERT 속도가 느려지지 않는가?

A : 미리 저장해둔 단어이기 때문에 SELECT만

- index를 걸었던 컬럼의 길이를 varchar(21)로 변경 - 아무런 생각없이 word컬럼을 varchar(45)로 지정

- 단어의 길이를 보니 최대 길이가 21

Page 19: DB Basic _ 성능개선

오! 잘된다.

Page 20: DB Basic _ 성능개선

지금은����������� ������������������  잘되만,����������� ������������������  데이터가����������� ������������������  쌓이면����������� ������������������  문제가����������� ������������������  생길����������� ������������������  수도����������� ������������������  있겠다.����������� ������������������  !

기존의����������� ������������������  쿼리를����������� ������������������  EXPLAIN����������� ������������������  해보자!

Page 21: DB Basic _ 성능개선

Query

서브쿼리..개선의 냄새가 난다.

Page 22: DB Basic _ 성능개선

역시나

Page 23: DB Basic _ 성능개선

이전처럼 사뿐하게 조인으로..끝

Page 24: DB Basic _ 성능개선

아쉽다.

쿼리를 통해 얻은 결과를 읽는동안 다른 쿼리를 요청한다.

Page 25: DB Basic _ 성능개선

DB에 접근하는 횟수 = rs를 얻기 위한 쿼리 + (countRS를 얻기 위한 쿼리 * rs의 길이)

while loop동안 계속 요청

Page 26: DB Basic _ 성능개선

한번에

딱 한번의 쿼리로 모든 정보를 받고 싶다.

Page 27: DB Basic _ 성능개선

한번에

Page 28: DB Basic _ 성능개선

느낀 건 Join Join Join

Page 29: DB Basic _ 성능개선

끝 감사합니다.