MySQL limit으로 페이징하기

무지성개발자·2023년 10월 28일
0

limit

limit는 읽는 읽는 쿼리의 row를 제한 하는 기능이다. SQL문의 제일 마지막에 위치하며 limit(시작위치, 오프셋)의 구조를 가지고 있다.

실제 동작 방식

limit(0, 10)은 처음부터 10개의 데이터만 필요하다는 뜻이다. 그럼 게시판의 페이징 상황에서 300페이지 자료가 필요하다면 limit(3000, 10)을 하면 된다.

하지만 이 경우 실제 필요한 데이터는 10개지만 3010개를 읽고 10개만 사용하고 3000개는 버려지는 상황이 발생한다.

페이징 개선

결국 끝에 있는 자료를 찾을 수록 스캔할 범위가 넓어지니 쿼리속도는 느려진다. 때문에 where절을 통한 페이징을 추천한다.

# 이거 보단
SELECT * FROM some_tabe LIMIT 200000, 10;
# 이걸 추천
SELECT * FROM some_table WHERE id > 200000 limit 0, 10;

테스트

SELECT * FROM bulk limit 2900000, 10;
SELECT * FROM bulk WHERE seq >= 2900000 limit 0, 10;
  • 속도차이

    limit만 사용한 쿼리는 1.75초가 걸렸는데 WHERE을 사용한 쿼리는 거의 0초에 가깝다.

한 줄평 : 근데 페이징에 바로 적용하기에는 중간 페이지를 바로 가는 경우를 좀 생각해봐서 사용해야 할 것 같다.

profile
no-intelli 개발자 입니다. 그래도 intellij는 씁니다.

0개의 댓글