인덱스 무효화 쿼리를 범위 조건으로 개선해 SQL 성능 최적화
목차
SQL 및 메뉴 구조 최적화
SQL 최적화와 쿼리 구조 개선 작업임. 실행 계획 확인 없이 작성된 쿼리들이 문제가 됐음.
인덱스 활용 패턴
-- 비효율: 함수 적용으로 인덱스 무효화
WHERE DATE(created_at) = '2026-03-01'
-- 효율: 범위 조건으로 인덱스 활용
WHERE created_at >= '2026-03-01'
AND created_at < '2026-03-02'
MyBatis SQL Fragment 활용
<sql id="commonFilter">
<if test="partnerSn != null">AND partner_sn = #{partnerSn}</if>
<if test="status != null">AND status = #{status}</if>
</sql>
반복되는 WHERE 조건을 fragment로 공통화함.
쿼리 성능 체크리스트
| 항목 | 확인 방법 |
|---|---|
| 풀 테이블 스캔 | EXPLAIN으로 type 확인 |
| N+1 쿼리 | 루프 내 DB 조회 제거 |
| 불필요 컬럼 | SELECT * 대신 명시적 컬럼 |
개발 원칙 정리
이 작업을 진행하면서 재확인한 원칙들:
작은 커밋: 변경 단위를 작게 유지해서 코드 리뷰와 롤백이 쉽게.
테스트 먼저: 변경 전 현재 동작을 파악하고, 변경 후 동일하게 동작하는지 확인.
문서 동기화: 코드가 바뀌면 관련 주석과 문서도 같이 업데이트.
| 원칙 | 이유 |
|---|---|
| 단일 책임 | 하나의 함수/클래스는 하나의 역할만 |
| 명시적 코드 | 영리한 코드보다 읽기 쉬운 코드 |
| 실패 우선 처리 | happy path보다 에러 케이스 먼저 설계 |
끝
댓글 0
첫 댓글 달아줘.