상세 컨텐츠

본문 제목

LIMIT 절 사용해서 대용량 데이터 나눠서 조회하기

IT/DB

by JR 2025. 8. 2. 12:45

본문

300x250
반응형

 

 

 

 

안녕하세요~!

 

평소에 데이터 추출을 하다가 건수가 너무 많아서 데이터는 뽑히는데 툴에서 이 데이터 셋을 그리다가 

 

프로그램이 뻗거나 먹통이 되는 경우가 있는데요. 

 

적당하게 나눠서 뽑기 위해 LIMIT절을 잘 사용하면 좋습니다.

 

LIMIT 절을 사용해서 50만 건 데이터를 10만 건씩 나눠서 조회하려면, LIMIT과 OFFSET을 조합하면 됩니다.


✅ 기본 구조

 
SELECT *
FROM payments
ORDER BY payment_date -- 또는 적절한 정렬 기준
LIMIT 100000 OFFSET N;

 


✅ 10만 건씩 나눠서 5회 조회

 

회차 LIMIT OFFSET 쿼리 예시
1회차 100000 0 LIMIT 100000 OFFSET 0
2회차 100000 100000 LIMIT 100000 OFFSET 100000
3회차 100000 200000 LIMIT 100000 OFFSET 200000
4회차 100000 300000 LIMIT 100000 OFFSET 300000
5회차 100000 400000 LIMIT 100000 OFFSET 400000
 

🔍 예시 전체 쿼리 (3번째 블록 추출)

sql
복사편집
SELECT * FROM payments ORDER BY payment_date LIMIT 100000 OFFSET 200000;

⚠️ 주의사항

  1. ORDER BY는 반드시 포함하는 것이 좋습니다. 그렇지 않으면 페이지마다 결과가 뒤섞일 수 있습니다.
    • 예: ORDER BY payment_date, ORDER BY customer_id, 또는 기본 키.
  2. 정렬 컬럼에 인덱스가 있으면 성능이 더 나아집니다.
  3. 데이터가 실시간으로 바뀌는 경우, 페이징 결과가 중복되거나 누락될 수 있으므로 스냅샷 기준으로 작업하는 것이 안전합니다.
  4. OFFSET이 커지면 성능이 나빠질 수 있습니다. 이 경우엔 id 기준으로 범위 조회하는 방식도 고려해보세요 (아래에 소개).

✅ 성능 더 좋은 대안: id 기준 범위 페이징

 
-- 예: id 컬럼이 있고 정수일 때
 
SELECT * 
FROM payments 
WHERE id > 200000 AND id <= 300000 
ORDER BY id;

이 방식은 OFFSET 없이도 빠르게 원하는 범위를 가져올 수 있어서 대용량에서 더 효율적입니다.

 

 

 

 

LIMIT 0,100000 이면 99999번까지 뽑은걸까요?

 

다음은 LIMIT 100000,100000으로 하면 그다음 10만건 조회인지?

 

 

CUBRID에서 LIMIT 절의 구문은 다음과 같습니다:

 
LIMIT <OFFSET>, <ROW_COUNT>
 
 
 

즉, LIMIT 0, 1000000번째(첫 번째) 행부터 시작해서 100000개를 조회하는 것이고,


LIMIT 100000, 100000100000번째 행부터 100000개를 가져옵니다.


✅ 자세히 정리

쿼리 의미 조회범위 (0-based index)
LIMIT 0, 100000 처음부터 10만 개 0번 ~ 99,999번 (총 10만 건)
LIMIT 100000, 100000 그다음 10만 개 100,000번 ~ 199,999번
LIMIT 200000, 100000 또 그다음 10만 개 200,000번 ~ 299,999번
... 계속 반복 ...
 

⚠️ 주의사항

  • OFFSET은 0부터 시작합니다.
  • LIMIT N, M은 → N번 인덱스부터 시작해서 M개 추출.
  • 정렬 기준이 없는 경우, 각 쿼리 실행 시 결과가 바뀔 수 있으니 반드시 ORDER BY를 추가해야 합니다.

📌 예시

-- 1번째 블록
SELECT * FROM payments
ORDER BY payment_date
LIMIT 0, 100000;

-- 2번째 블록
SELECT * FROM payments
ORDER BY payment_date
LIMIT 100000, 100000;

-- 3번째 블록
SELECT * FROM payments
ORDER BY payment_date
LIMIT 200000, 100000;
 
 
 
 
<LIMIT 절 사용팁>
 
 
사용팁으로는 저도 평소에 데이터 추출할 때 엑셀이나 TXT 파일로 뽑다보면 컴퓨터 사양 메모리에 따라 데이터 조회 툴이 뽑다가 뻗을 때가 있어서 적당한 범위를 지정해주는 것이 좋습니다.
 
기본적으로 전체 데이터 건수를 카운트해서 대략 몇 건씩 나눠서 몇 번 뽑을 지 결정합니다.
 
전체가 100만건인데 1만건씩 지정하면 100번을 조회해야하니 10만건씩 10번을 뽑는게 효율적입니다.
 
 

 

 

 

 

 

300x250
반응형

관련글 더보기