목록 보기
Slow Query 최적화 하기
백엔드

Slow Query 최적화 하기

롯데ON
롯데ON
2024년 6월 12일

두줄요약

주문서 진입 시 발생하던 상품권 점유 인증 조회 쿼리의 병목을 분석하고 개선했습니다. 서브쿼리를 제거하고 결합 인덱스와 LIMIT 1을 적용해 조회 성능을 크게 높였습니다.

문제 상황

  • 주문서 진입 시 상품권 점유 인증 조회 쿼리가 동작하며 속도 저하 발생
  • 최근 한 달만 필요하지만 전체 테이블을 조회해 불필요한 자원 낭비 발생
  • 회원번호 단일 인덱스와 서브쿼리 구조로 인덱스 랜덤 액세스와 중복 참조 비효율 발생

원인 분석

  • 분포도가 넓은 회원번호 컬럼을 인덱스로 사용한 랜덤 액세스 부담
  • 조회 범위가 과도하게 넓어 전체 스캔 후 일부만 사용되는 구조
  • 서브쿼리로 인한 보조 테이블 생성과 인덱스 재참조

해결 방법

  • 서브쿼리 제거 후 회원번호 + 인증일시 결합 인덱스로 변경
  • 휴대폰번호 조건은 메인 쿼리로 이동하고 ORDER BY 인증일시 DESC, LIMIT 1 추가
  • 인덱스 레인지 스캔과 인덱스 기반 정렬, 스트리밍 조회 유도

다음 읽기

#MySQL 주제를 다룬 다른 회사 글

10초 타임아웃에서 벗어나기까지의 여정

체험단 활동목록 조회 API의 10초 타임아웃을 대용량 데이터에 맞는 인덱스와 쿼리 분리로 해결했습니다. 조회 구조를 바꿔 p99 지연시간을 20ms 이하로 낮췄습니다.

무신사
무신사
백엔드

댓글 0개

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...