1 | |
안녕하세요.
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)에서 게시글+댓글 같이 보기 라는 기능이 있는데
쿼리에서 제가 한건
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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만개가 넘은 상황이다 보니 성능이 많이 문제가 되더라구요
이런경우는 다들 쿼리 튜닝을 어떤식으로 하시는지 궁금합니다.
튜닝 보다는 오류 수정이 필요해 보입니다.
단순히 더하는게 아니라 본글과 관련된 댓글이 어우러 지도록 정렬해야 할 듯 합니다.
최신순으로 보여지는 정렬도 필요해 보이구요.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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 ; |