강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

박동훈님의 프로필 이미지
박동훈

작성한 질문수

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

게시글 목록 API - 무한 스크롤 설계

안녕하세요 무한스크롤 강의듣다가 질문이 있습니다.

해결된 질문

작성

·

7

0

  • 학습 관련 질문을 최대한 상세히 남겨주세요!

  • 고민 과정도 같이 나열해주셔도 좋습니다.

  • 먼저 유사한 질문이 있었는지 검색해보세요.

  • 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

 

무한스크롤을 공부하면서 쿼리플랜을 자세히 살펴보았습니다. rows라는게 예상 스캔 행 수 라고 찾게 되었는데요, offset을 사용하지않고 마지막 last_article_id로 limit 30개 해서 30개만 스캔하면 될줄 알았는데, 저는 6백만개가 나오고 강사님은 5522497개 (무한 스크롤 설계 - 6:31초)가 나오는걸 알게 되었어요. 이게 시간은 빠르긴한데 뭔가 스캔하는게 많아서 이상하다 싶었어요.. 그래서 인덱스를 지우고, (article_id desc, board_id)로 위치도 바꾸거나, use index로 인덱스를 강제하게 해봤는데 결과가 똑같더라구요.. 이 row를 줄이기 위한 방법이 있는지 궁금합니다. cladue에서는 최악의 경우의 row를 보여준다고 하면서도, 또다른 답변으로는 쿼리 수정으로 최적화해야한다 나뉘더라구요. 최악의 경우라 해도 왜 6백만개나 scan하는지.. 그냥 속도빠르니깐 넘어가도 상관없는지 의심이 들어서 더 찾아볼수있는 방법이나 조언 부탁드립니다.

 

감사합니다. 강의 거의 완강햇다가 한번 더 다시 듣고있습니다.

답변 1

0

쿠케님의 프로필 이미지
쿠케
지식공유자

동훈님, 안녕하세요!

 

쿼리 플랜에서 나오는 rows는 통계치 기반이고 실제로 그렇게 스캔하는게 아니므로 문제될 부분은 없습니다.

줄이는 방법에 대해서 고민해본 적은 없고, 줄여야하는 이유에 대해서도 크게 신경 쓸 필요는 없을 것 같습니다.

플랜은 실제로 스캔하는게 아니라 말 그대로 예상치를 기반으로 만들어진 계획으로 인지하시면 됩니다.

반드시 플랜과 동일한 방식으로 수행되는 것도 아니고요.

rows 수가 강의와 다르게 나오는 것에 대해서도, 각 환경의 데이터 분포나 통계치 갱신 시점 등에 따라서 차이가 있다고 봐주시면 될 것 같습니다.

실제 쿼리는 LIMIT만큼 스캔하고 종료됩니다!

박동훈님의 프로필 이미지
박동훈

작성한 질문수

질문하기