[프로젝트] 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 인덱싱의 중요성 확인
- 데이터 접근 패턴 분석을 통한 효율적인 인덱스 설계의 중요성 입증