Skip to content

쿼리 성능 개선 ‐ 카테고리 목록 조회

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

데이터 스펙

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

컴퓨터 스펙

윈도우 11
프로세서 AMD Ryzen 9 4900HS with Radeon Graphics 3.00 GH
설치된 RAM 16.0GB
시스템 종류 64비트 운영 체제, x64 기반 프로세서

테스트 조건

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



개선 전

속도 측정

Total request count: 1000
Total elapsed time: 26638ms
Average elapsed time: 26ms

쿼리 분석

총 2개 쿼리 실행

1. 카테고리 조회 (MemberID별)

  • Repository: CategoryJpaRepository
  • Method: findAllByMemberIdOrderById
    select
        c1_0.id,
        c1_0.created_at,
        c1_0.is_default,
        c1_0.member_id,
        c1_0.modified_at,
        c1_0.name 
    from
        category c1_0 
    where
        c1_0.member_id=? 
    order by
        c1_0.id
  • 호출 횟수: 1회

1. Member 조회 (ID별)

  • CategoryJpaRepository.findAllByMemberIdOrderById 실행 시 동작
    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.id=?
  • 호출 횟수: 1회

개선을 위해 필요한 작업

인덱스 개선 사항

  • 현재 조회하는 5가지 명령문 모두 primary key, Foreign key 자동으로 인덱스가 생성된다.

Category 테이블

  • 인덱스 제안:
    • member_id
      • 이유: join에서 category_id로 조인하기 때문에 인덱스가 필요.
      • 추가 여부: O, CREATE INDEX idx_member_id ON category(member_id);

개선 후

속도 측정

Total request count: 1000
Total elapsed time: 22197ms
Average elapsed time: 22ms

쿼리 분석

총 2개 쿼리 실행

1. 카테고리 조회 (MemberID별)

  • Repository: CategoryJpaRepository
  • Method: findAllByMemberIdOrderById
    select
        c1_0.id,
        c1_0.created_at,
        c1_0.is_default,
        c1_0.member_id,
        c1_0.modified_at,
        c1_0.name 
    from
        category c1_0 
    where
        c1_0.member_id=? 
    order by
        c1_0.id
  • 호출 횟수: 1회

1. Member 조회 (ID별)

  • CategoryJpaRepository.findAllByMemberIdOrderById 실행 시 동작
    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.id=?
  • 호출 횟수: 1회


성능 개선 결과

개선 전

Total request count: 1000
Total elapsed time: 26638ms
Average elapsed time: 26ms

개선 후

Total request count: 1000
Total elapsed time: 22197ms
Average elapsed time: 22ms

⚡️ 코드zap

프로젝트

규칙 및 정책

공통

백엔드

프론트엔드

매뉴얼

백엔드

기술 문서

백엔드

프론트엔드

회의록


Clone this wiki locally