Back End/서버 비용

[SQL 튜닝] Offset 쿼리가 느린 이유

DevPing9_ 2022. 12. 19. 18:58

 

* 단순 지식 기록용 포스팅입니다.


Off-set 쿼리

SELECT *
FROM items
WHERE 조건문
ORDER BY id DESC
OFFSET 페이지번호
LIMIT 페이지사이즈

 

 

Off-set 쿼리가 느린 이유

select .. limit 10000,10020 과 같은 쿼리를 실행하면 10,000부터 20개만 읽는게 아니라,

10,020개를 읽은 후 앞의 10,000개를 버리는 식으로 DB가 동작하기 때문.

 

왜 그렇게 비효율적으로 동작하게 설계를 했을까 했는데, where 절이 삽입되면 인덱스로 끊어서 offset 위치를 파악할 수 없기 때문.

 

그래서 데이터수가 많아지고, Offset 의 위치가 커질수록 조회쿼리는 느려짐.

 

데이터 수가 많아지면 UI 를 바꿔서라도 No Offset 쿼리로 변경하는 것이 좋겠다.

 


 

 

Reference

 

1. 페이징 성능 개선하기 - No Offset 사용하기

일반적인 웹 서비스에서 페이징은 아주 흔하게 사용되는 기능입니다. 그래서 웹 백엔드 개발자분들은 기본적인 구현 방법을 다들 필수로 익히시는데요. 다만, 그렇게 기초적인 페이징 구현 방

jojoldu.tistory.com

 

728x90