Skip to content

쿼리 성능 개선 ‐ 회원 정보 조회

김경미 edited this page Sep 26, 2024 · 4 revisions

[!note] 데이터 스펙 멤버 : 10 건 카테고리 : 100 건 (멤버 당 10 건) 태그 : 2000 건 (멤버 당 200 건) 템플릿 : 10만 건 (멤버 당 1만 건) 소스 코드 : 10만 ~ 50만 건 (템플릿 당 1~5 개 랜덤 생성)

[!note] 컴퓨터 스펙 윈도우 11 프로세서 AMD Ryzen 9 4900HS with Radeon Graphics 3.00 GHz 설치된 RAM 16.0GB 시스템 종류 64비트 운영 체제, x64 기반 프로세서

[!note] 테스트 조건 10개의 스레드로 100번씩 실행 총 1000번의 요청 실행 최대 테스트 대기 시간은 60초


개선 전

속도 측정

Total request count: 1000 Total elapsed time: 27379ms Average elapsed time: 27ms

쿼리 분석

1. 회원 조회 (Id 기반)

  • Repository: MemberJpaRepository
  • Method: fetchByName
select
    m1_0.id,
    m1_0.created_at,
    m1_0.modified_at,
    m1_0.name,
    m1_0.password,
    m1_0.salt 
from
    member m1_0 
where
    m1_0.name=?
  • 호출 횟수: 1회

개선을 위해 필요한 작업

인덱스 개선 사항

Member 테이블

  • 인덱스 제안:
    • id, name
      • 이유: 커버링 인덱스 사용으로 속도 개선을 위해
      • 추가 여부: O, CREATE INDEX idx_member_id_name ON member (id, name);

쿼리 최적화

커버링 인덱스

커버링 인덱스 (Covering Index 혹은 Covered Index)

  • 쿼리를 충족시키는 데 필요한 모든 데이터를 갖고 있는 인덱스
  • SELECT, WHERE, ORDER BY, GROUP BY 등에 사용되는 모든 컬럼이 인덱스의 구성요소인 경우

멤버 ID로 해당 멤버 객체를 조회한다. 하지만 실상 해당 로직 이후 멤버 이름 외에는 사용되는 정보가 없다.

그래서 멤버를 조회하는 로직을 멤버 이름을 조회하는 로직으로 수정한다. 이를 통해 커버링 인덱스 이용하도록 변경해 쿼리 성능을 개선한다.

Before

After

개선 후

속도 측정

Total request count: 1000 Total elapsed time: 23898ms Average elapsed time: 23ms

쿼리 분석

--- 제우스꺼 받아서 수정하고 ~

⚡️ 코드zap

프로젝트

규칙 및 정책

공통

백엔드

프론트엔드

매뉴얼

백엔드

기술 문서

백엔드

프론트엔드

회의록


Clone this wiki locally