게시판 좋아요수, 댓글수 구하는 성능개선 문의 0 6 639

by 즐라탄빡쳤다 [MySQL] [2022.02.11 09:19:36]


안녕하세요 게시판을 만들다가 성능관련 쿼리 문의 드립니다

아래 3개의 테이블이 있습니다.

BOARD(T)

board_id board_titl board_content
1 test1 test2
2 test3 test4

LIKE(T)

like_id board_id user_id
1 1 1
2 2 1
3 1 2

 

REPLY(T)

reply_id board_id reply_content
1 2 test1
2 2 test2
3 1 test3

해당 테이블의 연관된 컬럼은 board_id입니다.

이런테이블 구조로 조회를 할때 각 게시글의 좋아요수, 댓글수를 구하는 조회 쿼리를 짜려고했습니다. 

그런데 문득 생각이 난게

현재는 문제 없지만 만약에 좋아요 테이블, 댓글 테이블이 데이터가 엄청 많아진다면 성능에 문제가 생기지 않을까 싶어서

문의 드립니다. 제가 사용한 쿼리는 아래와 같습니다.



select a.board_id, 
          a.board_title,
          (select count(*) from like b where b.board_id = a.board_id) as like_cnt,
          (select count(*) from reply c where c.board_id = a.board_id) as reply_cnt
from board a

 

해당 쿼리를 날리면 좋아요, 댓글수는 서브쿼리로 날리면 전체 테이블을 Full스캔을 하여 테이블에 데이터가 많아지면 많아질수록 성능적으로

퍼포먼스가 안나올거같다는 생각이 들었는데요

 

혹시 이걸 개선 또는 튜닝을 어떤식으로 효과적으로 해야할지 고민이 되서 질문남깁니다.

 

데이터베이스는 MySQL입니다.

by 마농 [2022.02.11 09:27:31]

like 및 reply 테이블의 board_id 항목에 인덱스가 있어야 하구요.
페이징 쿼리를 사용하고 있다면?
서브쿼리의 위치가 페이징 처리 이후가 되어야 합니다.


by 즐라탄빡쳤다 [2022.02.11 09:32:40]

감사합니다 마농님

페이징을 현재 사용하고 있는데요

인덱스가 가정이 있다는 전재하에 쿼리를 작성해보면




select  a*, 
          (select count(*) from like b where b.board_id = a.board_id) as like_cnt,
          (select count(*) from reply c where c.board_id = a.board_id) as reply_cnt 
from(
        select board_id, 
                   board_title
        from board 
        limit 30
) a

위의 쿼리처럼 된다면 성능개선이 좀더 효과적일까요>?
 


by 마농 [2022.02.11 09:53:43]

네. 맞습니다.
다만, 페이징 쿼리에 정렬이 들어가야 하지 않을런지요?
대분분 최신글이 맨 위에 나오게 되지요.
ORDER BY board_id DESC


by 즐라탄빡쳤다 [2022.02.11 09:58:01]

넵 맞습니다. 약식으로 여쭤본다고 order BY는 빼고 질문을 드렸네요....

 

오랜만에 질문했는데 좋은 답변 감사합니다.


by 마농 [2022.02.11 10:19:17]

간결하게 질문하는 것은 좋지만 정보가 왜곡되면 안됩니다.
이번 질문의 핵심은 페이징입니다.
만약 페이징이 없는 최초 질문의 쿼리였다면? 최적화 기법이 달라졌을 것입니다.
또한 정렬이 없는 두번째 질문의 쿼리였어도? 최적화 기법이 달라졌을 것입니다.


by 즐라탄빡쳤다 [2022.02.11 12:59:27]

네 감사합니다.

아직 공부를 다 못하여서 페이징 하고 안하고 차이가 있는지 몰라서 왜곡되게 설명드린것 같습니다.

감사합니다

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입