Database

MySQL에서 LIMIT과 OFFSET을 사용해 Paging하기

Greensky0026 2021. 5. 13. 23:03
반응형

 mysql에선 limit과 offset을 활용해서 페이징을 구현할 수 있으며, 퍼포먼스도 좋다.

속성을 별도로 추가하지 않고 튜플의 출력위치를 설정할 수 있기 때문이다.

 

SELECT *
FROM paging
ORDERS LIMIT 20 OFFSET 0

SELECT *
FROM paging
ORDERS LIMIT 0, 20

LIMIT은 출력할 행의 수이고 OFFSET은 가져올 데이터의 초기 위치값이다.

위의 코드에서 ORDERS LIMIT 0, 20(OFFSET , LIMIT)은

쿼리의 결과로 나온 튜플들의 0번째부터 20개를 출력한다는 말이다.

 

그렇다면, 10개의 튜플씩 한 페이지가 되게끔 페이징을 한다면 쿼리문은 어떻게 되는가?

글번호순으로 오름차순 출력한다고 한다면 아래와 같다.

//1페이지 : 글번호 1~10
SELECT * 
FROM paging
ORDER BY no ASC
LIMIT 0, 10

//2페이지 : 글번호 11~20
SELECT * 
FROM paging
ORDER BY no ASC
LIMIT 10, 10

//1페이지 : 글번호 21~30
SELECT * 
FROM paging
ORDER BY no ASC
LIMIT 20, 10

 

근데 보통 최신글을 1페이지로 하기 때문에, 오름차순이 아니라 내림차순으로 출력한다.

SELECT * 
FROM paging
ORDER BY no DESC
LIMIT 0, 10

그럼 궁금해진다.

그럼 23개가 끝인 데이터를 LIMIT 20, 10으로 불러오면 어떻게 될까?

오류없이 정상적으로 21~23의 자료만을 반환한다.

이말인즉슨, 

전체 행의 갯수에 페이지당 출력할 튜플수를 나눠서 페이지의 갯수만 계산하면 되고,

나머지는 Query로 처리를 할 수 있다는 이야기이다.

반응형