db basic _ 성능개선
TRANSCRIPT
DB Basic 성능개선을 해보자!
이영남 F : facebook.com/utopianami M : [email protected]
수업시간…
[수업자료 중 일부]
이제 쿼리 배웠는데…. 나~중에 쓰겠지!!
3일 뒤……돌아가지 않는다.
하려고 했던 것은?
글을 스크랩하면 그 글에서 단어만 뽑기
1. DB에 저장된 단어에서 위 단어는 몇번 나오는가? 2. 카테고리를 기준으로 각 카테고리에서 위 단어는 몇번 나오는가?
단어 글 번호 카테고리데이터베이스 1 정치유토피아 1 정치데이터베이스 2 IT메시 3 스포츠
메시
데이터베이스
만점
분석중인 단어 DB에 저장된 단어
예를 들면
!!1번 요구사항 결과 {메시 : 1}, {데이터베이스 : 2}, {만점 : 0}
2번 요구사항 결과 : { 정치 : {메시 : 0}, {데이터베이스 : 1}, {만점 : 0} }, { IT : {메시 : 0}, {데이터베이스 : 1}, {만점 : 0} }, { 스포츠 : {메시 : 1}, {데이터베이스 : 0}, {만점 : 0} },
예상결과는
Query
- learning_set : 미리 저장해 둔 단어 - article 글을 저장해둔 테이블 - word : article의 단어를 저장해둔 테이블
Query
쉽게 쉽게 생각해서 !1. url을 통해서 aid를 찾고, 2. 그 aid의 단어 리스트를 뽑고, 3. 미리 저장한 learning_set에서 단어리스트만 뽑아서, 4. group by 해서 count!
결과는
BYE BYE
왜? 처음엔 잘 되었는데, 데이터를 22만개 정도 넣으니… !
Explain
!Point
Point
Dependent subquery는!무조건 없애야 해요.!
229390 x 229390 = ?
개선서브쿼리를 조인으로!
개선
229390 x 229390 = ?
229390!!!
추가개선
1. Index !!!!2. length!
- `learning_set`테이블의 `word`컬럼에 인덱스 - INSERT 속도가 느려지지 않는가?
A : 미리 저장해둔 단어이기 때문에 SELECT만
- index를 걸었던 컬럼의 길이를 varchar(21)로 변경 - 아무런 생각없이 word컬럼을 varchar(45)로 지정
- 단어의 길이를 보니 최대 길이가 21
오! 잘된다.
지금은����������� ������������������ 잘되만,����������� ������������������ 데이터가����������� ������������������ 쌓이면����������� ������������������ 문제가����������� ������������������ 생길����������� ������������������ 수도����������� ������������������ 있겠다.����������� ������������������ !
기존의����������� ������������������ 쿼리를����������� ������������������ EXPLAIN����������� ������������������ 해보자!
Query
서브쿼리..개선의 냄새가 난다.
역시나
이전처럼 사뿐하게 조인으로..끝
아쉽다.
쿼리를 통해 얻은 결과를 읽는동안 다른 쿼리를 요청한다.
DB에 접근하는 횟수 = rs를 얻기 위한 쿼리 + (countRS를 얻기 위한 쿼리 * rs의 길이)
while loop동안 계속 요청
한번에
딱 한번의 쿼리로 모든 정보를 받고 싶다.
한번에
느낀 건 Join Join Join
끝 감사합니다.