MySQL 5.6 버전에서 유일성을 가지지 않은 필드를 order by 절에 넣을때 limit 조건과 문제가 발생하나요?
조회수 1036회
안녕하세요 MySQL 쿼리에 대해 질문이 있어 글을 올립니다. 쿼리를 게시판 리스트 형식으로 던지게 되는데, 쿼리는 아래와 같습니다.
1page
select * from table_name where ~~~~ order by DueDate limit 0,15;
2page
select * from table_name where ~~~~ order by DueDate limit 15,15;
각 페이지에 대해 15개씩 끊어서 보여주는 쿼리이며, mysql의 limit
를 이용하는중인데,
문제는 1페이지에 나왔던 레코드가 2페이지에 또 나오는 현상이 발생합니다.(where
와 limit
조건을 제외하면 1건이 확실합니다.)
order by에 걸리는 DueDate
필드가 PK나 인덱스같은 유일성을 가진 필드가 아니라서 이런 현상이 발생한다고 생각하여
order by DueDate, tableid
로 PK도 같이 조건절에 주었는데 이렇게 수정했을경우 정상입니다.
유일성을 가지지 않은 필드가 order by 조건에 걸릴 경우 이런 문제가 발생하나요?
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
1 답변
-
유일성을 가지지 않아서 발생한 문제라기 보다는
DueDate
가 같은 값이 여러개 있어서 발생하는 문제인것 같습니다.예를들어 어떤 조건(where)를 통해 셀렉션(selection)된 결과가 다음과 같고, 이를 10개씩 페이지를 나눈다고 할 때,
ID DueDate 1 2016-09-01 2 2016-09-02 3 2016-09-03 4 2016-09-04 5 2016-09-05 6 2016-09-06 7 2016-09-07 8 2016-09-08 9 2016-09-08 10 2016-09-08 11 2016-09-08 12 2016-09-08 13 2016-09-09 14 2016-09-10 15 2016-09-11 16 2016-09-12 17 2016-09-12 18 2016-09-12 19 2016-09-13 20 2016-09-14 첫 페이지는 1~7이 활실히 포함될 것이나, 8~12중에 먼저 정렬되는 3개가 포함될 것 입니다. 그리고 그 다음에 페이지의 경우, 8~12중 3개를 제외한 2개와 13~20개 목록에 나타나게 될텐데, 이때 8~12의 순서를 결정하는 하위 정렬 기준이 없는 경우, 경우에 따라 중복되어서 나타날 수 있습니다.
댓글 입력