SQL

SQL

LIMIT과 OFFSET은 성능이 저하될 수 있다 — WHERE으로 페이지네이션을 최적화하라

페이지 정보

profile_image
영삼이
0건 49회 25-03-28 15:28

본문

LIMITOFFSET은 성능이 저하될 수 있다 — WHERE으로 페이지네이션을 최적화하라

OFFSET이 커지면 느려진다, 커서 기반 페이지네이션을 고려하자


OFFSET 사용 시 성능 저하

SELECT * FROM orders
ORDER BY created_at DESC
LIMIT 10 OFFSET 1000;
  • OFFSET이 커질수록 데이터를 건너뛰는 데 시간이 걸림

  • 불필요하게 많은 데이터메모리로 가져오고 버리게 되므로 성능이 저하된다.

  • 예를 들어, 페이지가 커질수록 쿼리의 속도가 느려짐.


✅ 커서 기반 페이지네이션 사용

SELECT * FROM orders
WHERE created_at < '2021-12-01'
ORDER BY created_at DESC
LIMIT 10;
  • 커서 기반 페이지네이션은 마지막 페이지의 created_at 값을 기준으로 다음 페이지 데이터를 빠르게 찾을 수 있도록

  • OFFSET을 사용하지 않고, 데이터를 중복 없이 빠르게 로드할 수 있음


페이지네이션 예시: 커서 사용

-- 1 페이지
SELECT * FROM orders
ORDER BY created_at DESC
LIMIT 10;

-- 2 페이지
SELECT * FROM orders
WHERE created_at < '2021-12-01'  -- 1 페이지의 마지막 created_at
ORDER BY created_at DESC
LIMIT 10;
  • 각 페이지에서 마지막 created_at 값을 커서로 사용하여

  • 불필요한 데이터 스캔을 피할 수 있음


추가 팁

  • **LIMIT + OFFSET**은 작은 데이터셋에서는 유효하지만,
    데이터가 많아지면 커서 기반 페이지네이션이 훨씬 더 빠르고 효율적이다.

  • WHERE 조건을 추가하여 불필요한 데이터를 줄이는 방법도 성능 최적화에 효과적.


✔️ 큰 데이터셋에서 페이지네이션을 처리할 때는
OFFSET을 피하고 커서 기반 페이지네이션을 사용하는 것이 성능에 유리하다.

댓글목록

등록된 댓글이 없습니다.