- RDB에서 페이징 쿼리의 필요성을 설명해 주세요.2025년 05월 19일 12시 23분 56초에 업로드 된 글입니다.작성자: do_hyuk728x90반응형
페이징 쿼리(Paging Query) 는 전체 데이터를 부분적으로 나누어 데이터를 조회하거나 처리할 때 사용됩니다.
데이터를 상대적으로 작은 단위로 나누어 처리하기 때문에 데이터베이스나 애플리케이션의 리소스 사용 효율이 증가하며, 로직 처리 시간을 단축 시킬 수 있습니다.
MySQL에서 페이징 쿼리는 일반적으로 LIMIT, OFFSET 구문을 사용하여 작성합니다.
select * from subscribe limit 500 offset 0;LIMIT, OFFSET 방식 페이징 쿼리의 단점은 무엇이고, 어떻게 해결할 수 있나요?
LIMIT, OFFSET 방식의 페이징 쿼리는 뒤에 있는 데이터를 읽을 수록 점점 응답 시간이 길어질 수 있는데요.
왜냐하면, DBMS는 지정된 OFFSET 수만큼 모든 레코드를 읽은 이후에 데이터를 가져오기 때문입니다.
이 문제를 해결하기 위해서 OFFSET을 활용하지 않는 페이징 쿼리를 사용하는 것이 대표적입니다.
예를 들어, 다음과 같은 테이블이 있다고 가정하겠습니다.
create table subscribe ( id int not null auto_increment, deleted_at datetime null, created_at datetime not null, primary key(id), key idx_deleted_at_id(deleted_at, id) );이때, 특정 기간 동안 구독을 해제한 사용자를 조회하는 쿼리는 다음과 같습니다.
select * from subscribe where deleted_at >= ? and deleted_at < ?OFFSET을 사용하지 않는 페이징은 이전 페이지의 마지막 데이터 값을 기반으로 다음 페이지를 조회합니다.
이때, 상황에 따라서 첫 페이지 조회 쿼리와 N 회차 쿼리의 모양이 다를 수 있습니다.
위 예제에서 첫 페이지를 조회하는 쿼리는 다음과 같이 작성할 수 있습니다.
select * from subscribe where deleted_at >= ? and deleted_at < ? order by deleted_at, id limit 10;그리고 첫 페이지 이후의 페이지는 이전에 조회된 페이지의 마지막 값을 기반으로 다음 페이지를 조회합니다.
만약, 이전 페이지의 마지막 값의 deleted_at이 '2024-01-01'이고, 식별자가 78이라면 다음과 같은 쿼리가 작성됩니다.
select * from subscribe where # deleted_at이 같은 케이스를 대응 (deleted_at = '2024-01-01 00:00:00' and id > 78) or # 마지막 데이터 이후 데이터 조회 (deleted_at > '2024-01-01 00:00:00' and deleted_at < ?) order by deleted_at, id limit 10;728x90반응형'백엔드' 카테고리의 다른 글
Java에서 ReentrantLock을 활용한 동시 입금 제어 및 실패 테스트 정리 (0) 2025.05.23 💼 프로젝트 과제 예제: “은행 계좌 관리 시스템” (1) 2025.05.21 Spring에서 객체를 Bean으로 관리하는 이유를 설명해주세요. (0) 2025.05.16 NOT IN 쿼리를 사용할 때 발생할 수 있는 문제와 최적화 방법에 대해 설명해 주세요. (0) 2025.05.12 테스트 격리란 무엇인가요? (0) 2025.05.07 댓글