두 테이블의 유니온 관련 질문있습니다!(mysql) 0 3 1,443

by 즐라탄빡쳤다 [MySQL] [2022.05.06 16:27:43]



 

안녕하세요. 

MySQL 관련 UNION 질문이 있습니다.

 

게시판 테이블 ( BOARD)

boardNo(게시글 번호) title(제목) content(내용) userNo(게시글 작성자)
1 제목1 내용1 10
2 제목2 내용2 11

 

댓글 테이블 (REPLY)

replyNo(댓글번호) content(댓글 내용) boardNo(게시글 번호) userNo(게시글 작성자)
1 댓글 내용1 1 50
2 댓글 내용2 2 51

두개의 테이블이 있습니다.

제가 원하는건 하나의 게시판 테이블(html)에서 게시글+댓글 같이 보기 라는 기능이 있는데

 

쿼리에서 제가 한건

select *
from (
   select boardNo as boardNo,
             title as title,
             content as content
  from BOARD
  union all
  select replyNo as boardNo,
            '' as title,
           content as content
  from REPLY
)
limit 0, 30;

이런식으로 하였습니다.

처음에는 어차피 30개씩 가져와야 하니깐 limit를 각테이블당 15개씩 하면 되지 않을까? 라고 생각을 했는데 한쪽에 데이터가 없거나 부족할때는 많이 문제가 되어서

해당 쿼리처럼 제일 마지막에 페이징을 하였는데요

 

30개씩만 가지고 오는거지만 데이터가 지금 900만개가 넘은 상황이다 보니 성능이 많이 문제가 되더라구요

이런경우는 다들 쿼리 튜닝을 어떤식으로 하시는지 궁금합니다.

by 마농 [2022.05.09 11:08:26]

튜닝 보다는 오류 수정이 필요해 보입니다.
단순히 더하는게 아니라 본글과 관련된 댓글이 어우러 지도록 정렬해야 할 듯 합니다.
최신순으로 보여지는 정렬도 필요해 보이구요.
 

SELECT *
  FROM (SELECT boardNo
             , 0 replyNo
             , title
             , content
          FROM board
         UNION ALL
        SELECT boardNo
             , replyNo
             , '' title
             , content
          FROM reply
        ) a
 ORDER BY boardNo DESC, replyNo
 LIMIT 0, 30
;

 


by 즐라탄빡쳤다 [2022.05.09 11:53:49]

답변 감사합니다.

말씀해주신대로 해봤으나 속도는 차이는 있으나 느린건 마찬가지 인것 같습니다.ㅠㅠ


by 마농 [2022.05.09 12:20:19]

위에서 언급했듯이,
이 답변은 성능 개선 답변이 아닙니다.
쿼리 오류 수정 답변입니다.

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