문제 상황
MySql에서 Order by와 Limit 명령어로 로우 데이터를 하나씩 조회하려 한다(최대한 늦은 시간대부터 조회)
참고로 중복된 로우 데이터는 존재하지 않는다.(noti_no는 PK)
이 때, 이상하게 아래 두 limit 명령어를 통해 조회 시 아래와 같이 동일한 로우데이터가 조회된다....
1) limit 0,1
2) limit 1,1
원인
ORDER BY를 할 때, 기준이 되는 컬럼이 고유값을 가지고 있지 않으면, DB 또는 옵티마이저에 의해 최적의 방법에 따라 결과가 달라질 수 있습니다.
Order by 기준이 유니크한 값이 아닌 중복될 수 있는 start_dt, start_tm이다. 따라서, 위의 원인에 따라 항상 동일한 로우데이터들이 조회되는 것이 아니다.
해결
start_dt,start_tm은 중복된 데이터가 존재할 수 있으니 유니크한 noti_no(pk)도 함께 정렬 기준으로 잡도록 한다.
다시 말하면, order by 정렬 기준에 지정된 컬럼에는 유니크한 컬럼이 존재해야 조회 순서를 보장받을 수 있게 된다.
참고
https://non-stop.tistory.com/512