반응형
MySQL에서 데이터를 조회할 때, 모든 데이터를 한꺼번에 가져오는 것은 비효율적일 수 있다.
특히 페이지 단위로 데이터를 나눠서 보여줘야 하는 웹 페이지나 앱 화면에서는
LIMIT과 OFFSET을 활용한 페이징 처리가 꼭 필요하다.

📌 LIMIT이란 무엇인가?
LIMIT은 MySQL에서 가져올 행(row)의 개수를 제한하는 SQL 문법이다.
SELECT * FROM 테이블명
LIMIT 개수;
예제:
SELECT * FROM users
LIMIT 5;
- users 테이블에서 상위 5개 행만 조회
이 기능은 속도 개선과 UX 최적화에 매우 효과적이며,
리스트, 테이블, 게시판 등 거의 모든 화면에서 필수로 사용된다.
반응형
📍 OFFSET이란 무엇인가?
OFFSET은 건너뛸 행의 수를 지정한다.
예를 들어, 10개씩 끊어서 2번째 페이지를 보고 싶다면
앞의 10개는 건너뛰고 그 다음 10개를 가져와야 한다.
SELECT * FROM users
LIMIT 10 OFFSET 10;
- 11번째부터 10개 행을 조회
참고:
LIMIT 10 OFFSET 0 → 1번째 행부터 10개 조회 (1~10번째 행)LIMIT 10 OFFSET 10 → 11번째 행부터 10개 조회 (11~20번째 행)
✨ LIMIT과 OFFSET 조합
MySQL에서는 다음과 같이 LIMIT, OFFSET을 함께 쓰는 것이 일반적이다.
SELECT * FROM 테이블
LIMIT 가져올_개수 OFFSET 건너뛸_개수;
예:
SELECT * FROM products
ORDER BY id
LIMIT 20 OFFSET 40;
- 상품 목록에서 41번째부터 20개 출력 (3페이지)
반응형
⚡ LIMIT + ORDER BY 조합은 필수
데이터를 순서 없이 LIMIT만으로 잘라서 출력하면
매번 다른 결과가 나올 수 있다.
따라서 정렬 기준을 명시해야 한다.
SELECT * FROM posts
ORDER BY created_at DESC
LIMIT 10;
- 최신 게시글 10개 출력 (정렬 기준: 작성일)
🧪 실전 예제: 회원 페이지네이션
SELECT id, name, created_at
FROM members
ORDER BY created_at DESC
LIMIT 10 OFFSET 0; -- 첫 번째 페이지
SELECT id, name, created_at
FROM members
ORDER BY created_at DESC
LIMIT 10 OFFSET 10; -- 두 번째 페이지
- 이처럼 페이지 수 = OFFSET / LIMIT, 즉 OFFSET = (페이지번호 - 1) * 페이지당 건수로 계산하면 된다.
반응형
🚀 페이징 쿼리 성능 주의사항
- OFFSET이 커질수록 성능이 저하될 수 있음
- 특히 수십만 건 데이터에서 OFFSET 100000 같은 쿼리는 지양해야 함
- 인덱스 기반으로 WHERE + ID를 조합한 Keyset Pagination 방식이 성능에 유리함
예:
SELECT * FROM users
WHERE id > 5000
ORDER BY id
LIMIT 10;
- OFFSET을 쓰지 않고도 특정 위치부터 데이터를 가져올 수 있음
📎 공식 문서 참고
MySQL SELECT LIMIT 문서
https://dev.mysql.com/doc/refman/8.0/en/select.html
반응형
'DB' 카테고리의 다른 글
| [MySQL] SELECT + DATE_FORMAT / NOW() 함수 완벽 정리(날짜포맷, 현재시간) (0) | 2025.06.25 |
|---|---|
| [MySQL] SELECT CASE / IF 조건 분기 (쿼리 조건문 활용) (0) | 2025.06.25 |
| [MySQL] SELECT + COUNT, SUM, AVG, MAX, MIN 집계 함수 완전 정복 (0) | 2025.06.25 |
| [MySQL] SELECT DISTINCT – 중복된 데이터 없이 깔끔하게 조회하는 법 (0) | 2025.06.25 |
| [MySQL] SELECT GROUP BY + HAVING (그룹화와 조건 필터링) (0) | 2025.06.24 |
| [MySQL] SELECT ORDER BY 정렬 방법 완벽 정리 (0) | 2025.06.24 |
| [MySQL] SELECT WHERE 조건절 완벽 정리 (1) | 2025.06.24 |
| [MySQL] SELECT 기본 조회 방법 완벽 정리 (0) | 2025.06.24 |