커서 기반 페이징 처리

od·2025년 5월 16일
1

RDB

목록 보기
13/13

Offset Based Paging Query

JPA 에서 페이징 쿼리를 호출하면 offset 과 limit 을 이용하여 필요한 만큼 데이터를 추출하게 됩니다.
offset 은 앞에서부터 건너 뛸 열의 수를 의미하며 쿼리 실행시 offset 만큼의 데이터를 읽고 버려야 하므로
offset 이 커질수록 성능이 저하 됩니다.

/*
	앞에서 20개를 건너뛰고 10개를 추출
    SELECT * FROM product ORDER BY id ASC LIMIT 10 OFFSET 20;
*/ 
Page<Product> page = productRepository.findAll(PageRequest.of(2, 10));



Cursor Based Paging Query

커서 기반 페이징 쿼리는 마지막에 읽은 ID 값을 기준으로 필터링 한 후 필요한 만큼 데이터를 추출하는 방법 입니다.
Offset Based Paging Query 와 결과는 성능은 월등히 좋습니다.

/*
	SELECT * FROM product WHERE id > 100 ORDER BY id ASC LIMIT 10 OFFSET 0;
*/
@Query("SELECT p FROM Product p WHERE p.id > :cursor ORDER BY p.id ASC")
List<Product> findByCursor(@Param("cursor") Long cursor, Pageable pageable);

서비스는 다음의 정보를 전달합니다.

List<Product> result = productRepository.findByCursor(100L, 
	PageRequest.of(0, 10, Sort.by("id").ascending()));
profile
차분하게 단단히 쌓아가는 개발자

0개의 댓글