쌓고 쌓다

[JPA] Pageable 중복 레코드 문제 (MySQL Limit 주의) 본문

프로그래밍/JPA

[JPA] Pageable 중복 레코드 문제 (MySQL Limit 주의)

승민아 2023. 7. 22. 21:23

문제의 발견

게시글 정렬의 방법으로 날짜, 댓글 개수를 구현했다.

이상하게 날짜순은 잘 정렬되어 나오는데 댓글 개수로 정렬시 게시글(레코드)의 누락과 중복이 발생했다.

JPA의 Paging은 ORDER BY와 Limit를 사용한다.

 

 

문제 설명

아래의 결과를 먼저 보자. 게시글에 달린 댓글 개수인 comment_cnt를 내림차순으로 출력한다.

limit를 통해 보일 레코드를 조절했다.

네모 박스친 레코드 title이 "수정제목fsfs"인 레코드가 중복되어 나타난다.

사실 MySQL의 버그인가? 생각이 들었다. 내가 버그를 찾은걸까? ㅎㅎ

 

결과적으로 말하면 버그가 아니다.

 

ORDER BY에는 문제가 없다. 크기순으로 정렬되어 있지 않은가.

즉, 고유한 순서를 보장해주지 않지만 정렬은 보장해줬다.

 

그럼 LIMIT에 문제가 있는가?

LIMIT에도 문제가 없다. 단지 LIMIT는 서로 다른 행 집합을 보장해주지 않을뿐이다. ㅡ,ㅡ

 

해결 방법

그럼 어떻게 페이징을 하라고!?!?!?

정렬기준을 하나 더 추가하여 UNIQUE하게 만들어 버리자!

댓글 개수는 중복된 값이 있으니 정렬시 댓글의 고유번호도 함께 정렬 기준으로 잡아버리자.

 

https://bugs.mysql.com/bug.php?id=69732 

 

MySQL Bugs: #69732: LIMIT clause results in duplicate data across pages

 

bugs.mysql.com

 

 

Comments