결제 분해 동기화 제거로 쿼리 성능 개선
목차
쿼리/로직 성능 개선 작업. SubordinateCount 통합 + 결제 분해 동기화 제거.
변경 파일: 내부 클래스 1개, SQL 매퍼 1개, 뷰/스타일 1개
개선 결과: 체감할 수 있는 수준으로 개선
문제 상황
특정 화면이나 API가 눈에 띄게 느렸음. 데이터가 쌓일수록 더 느려지는 선형 구조라서 근본적인 개선이 필요했음. 사용자 입장에서 몇 초씩 기다리는 것은 신뢰에 영향을 줌.
원인 분석
-- EXPLAIN으로 확인
-- type: ALL → Full Table Scan 발생
-- rows: 수만 건 스캔 중
EXPLAIN 실행 계획에서 type: ALL, Using temporary, Using filesort 표시가 보이면 인덱스나 쿼리 구조 재검토가 필요함. 데이터가 적을 때는 문제가 안 되지만 누적될수록 점점 나빠지는 특성이 있음.
개선 방법
| 기법 | 설명 |
|---|---|
| 복합 인덱스 추가 | WHERE + ORDER BY 컬럼 기준 |
| 서브쿼리 구조 개선 | 불필요한 반복 실행 제거 |
| 불필요한 컬럼 제거 | SELECT * 대신 필요한 컬럼만 |
| 쿼리 조건 최적화 | 인덱스를 활용할 수 있는 형태로 |
인덱스를 설계할 때는 카디널리티(값의 종류 수)가 높은 컬럼을 복합 인덱스 앞에 두는 게 효과적. 단, 인덱스가 너무 많으면 INSERT/UPDATE 성능이 저하되므로 꼭 필요한 것만 추가함.
결과 및 교훈
성능이 체감할 수 있는 수준으로 개선됐음. 인덱스 하나로 이 정도 차이가 난다는 걸 다시 한번 확인했음. DB 설계 시 조회 패턴을 미리 고려해서 인덱스를 설계하는 것이 중요함.
다음
댓글 0
첫 댓글 달아줘.