[프로젝트] Modulo

MySQL DB 인덱싱을 통한 모듈 조회 성능 최적화

kwon-record 2025. 2. 4. 00:36

1. 문제 상황

1.1 성능 측정

  • 회원별 모듈(프로젝트, 경력, 교육 등) 조회 시 603ms의 응답시간
  • 주요 원인: member_id 기반 조회 시 테이블 Full Scan 발생

1.2 문제 분석

SELECT * FROM project p 
WHERE p.member_id = ?
  • 위 쿼리 실행 시 인덱스 없이 전체 테이블 스캔
  • 다수의 연관 엔티티에서 동일 패턴 발생

2. 해결 방안

2.1 인덱스 설계

@Entity
@Table(indexes = @Index(name = "idx_project_member", columnList = "member_id"))
public class Project extends BaseTimeEntity {
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "member_id")
    private Member member;
    //...
}

2.2 적용 대상

  • Project, Career, Education, BasicInfo, Resume, SelfIntroduction, Etc
  • 모든 엔티티의 member_id 컬럼에 인덱스 적용

3. 성능 개선 결과

3.1 측정 결과

  • Before: 603ms
  • After: 244ms
  • 개선율: 59.5% 응답시간 감소

. 결론

  • 회원별 모듈 조회 패턴에 대한 인덱스 적용으로 성능 대폭 개선
  • ManyToOne 관계에서 FK 인덱싱의 중요성 확인
  • 데이터 접근 패턴 분석을 통한 효율적인 인덱스 설계의 중요성 입증