감자의 개발공부 일지

[PostgreSQL] 원하는 갯수만큼 데이터 조회하기: LIMIT과 OFFSET 활용법 본문

DB

[PostgreSQL] 원하는 갯수만큼 데이터 조회하기: LIMIT과 OFFSET 활용법

Elie_J 2025. 3. 12. 14:04
반응형

1. LIMIT과 OFFSET의 개념

1.1. LIMIT

  • LIMIT은 SQL 쿼리에서 반환할 최대 행의 수를 지정하는 명령어
  • 이 명령어를 사용하면 필요한 데이터만 빠르게 조회할 수 있어 성능 최적화에 매우 유용
  • ex) 많은 양의 데이터 중에서 상위 몇 개의 데이터만 필요할 때 LIMIT을 사용하여 결과를 제한

1.2. OFFSET

  • OFFSET은 조회할 데이터의 시작 위치를 설정하는 명령어
  • 이 명령어는 페이징 처리할 때 자주 사용됨
  • 이전 페이지의 데이터를 건너뛰고 다음 페이지의 데이터를 조회할 때 유용
  • OFFSET은 항상 LIMIT과 함께 사용됨

 

 

2. LIMIT과 OFFSET의 문법

2.1. LIMIT 문법

SELECT column1, column2, ...
FROM table_name
LIMIT n;

-> n: 조회할 최대 행의 수를 지정

 

2.2. OFFSET 문법

SELECT column1, column2, ...
FROM table_name
LIMIT n OFFSET m;

-> n: 조회할 최대 행의 수를 지정합니다.

-> m: 조회를 시작할 행의 위치를 지정합니다. 첫 번째 행은 0부터 시작합니다.

 

3. LIMIT과 OFFSET을 활용한 예시

3.1. LIMIT을 사용한 데이터 조회

예를 들어, employees 테이블에서 상위 5명의 데이터를 조회한다고 가정

SELECT * FROM employees
LIMIT 5;

 

-> 위 쿼리는 employees 테이블에서 첫 5개의 행을 반환. LIMIT을 사용하면 필요한 데이터만 빠르게 조회 가능

 

3.2. OFFSET을 사용한 데이터 조회

이번에는 LIMIT과 OFFSET을 함께 사용하여 특정 범위의 데이터를 조회 한다고 가정함.

예를 들어, employees 테이블에서 6번째부터 10번째까지의 데이터를 조회하고 싶을때 사용할 수 있음.

SELECT * FROM employees
LIMIT 5 OFFSET 5;

-> 이 쿼리는 employees 테이블에서 6번째부터 10번째까지의 데이터를 조회.

-> LIMIT 5는 5개의 데이터를 조회하고, OFFSET 5는 처음 5개의 데이터를 건너뜀

 

3.3. ORDER BY와 LIMIT, OFFSET을 함께 사용한 예시

LIMIT과 OFFSET은 ORDER BY와 함께 사용하여 특정 조건에 맞는 데이터를 정렬하고 조회하는 데 유용.

예를 들어, 급여(salary)를 기준으로 내림차순으로 정렬하고, 상위 10명의 직원 중에서 6번째부터 10번째까지의 데이터를 조회하고 싶을때 사용할 수 있음

 

SELECT * FROM employees
ORDER BY salary DESC
LIMIT 5 OFFSET 5;

-> 이 쿼리는 salary를 기준으로 내림차순 정렬하고, 6번째부터 10번째까지의 데이터를 반환

 

4. LIMIT과 OFFSET을 사용한 페이징 처리 예시

LIMIT과 OFFSET은 데이터를 페이지 단위로 나누어 조회할 때 매우 유용

예를 들어, 한 페이지에 10명의 직원 데이터를 표시한다고 가정할 때, 각 페이지에 대한 데이터를 조회하는 쿼리를 작성할 수 있음

 

(1) 페이지 1 (OFFSET 0)

SELECT * FROM employees
ORDER BY salary DESC
LIMIT 10 OFFSET 0;

 

(2) 페이지 2 (OFFSET 10)

SELECT * FROM employees
ORDER BY salary DESC
LIMIT 10 OFFSET 10;

 

(3) 페이지 3 (OFFSET 20)

SELECT * FROM employees
ORDER BY salary DESC
LIMIT 10 OFFSET 20;

 

 

5. LIMIT과 OFFSET을 사용할 때의 성능 고려사항

LIMIT과 OFFSET은 매우 유용하지만, 데이터셋이 매우 크거나 OFFSET 값이 커질 경우 성능 저하가 발생할 수 있음.

이 경우 데이터베이스가 큰 데이터셋에서 필요한 행까지 모두 스캔해야 하기 때문.

따라서, 성능을 최적화하려면 적절한 인덱스를 활용하거나, WHERE 절을 사용하여 조건을 추가하는 방법을 고려할 수 있음.

 

성능 최적화를 위한 예시

SELECT * FROM employees
WHERE salary > 50000
ORDER BY salary DESC
LIMIT 10 OFFSET 20;

-> 위 예시에서는 salary가 50,000 이상인 직원들만 조회하기 때문에, 데이터베이스가 불필요한 데이터를 스캔하지 않고 성능을 개선할 수 있음

반응형