Query Optimization

EXPLAIN, 인덱스, N+1, 풀, 트랜잭션 최적화 지도

Nest 애플리케이션의 DB 성능은 ORM 옵션 하나가 아니라 쿼리 계획, 인덱스, 관계 로딩, 커넥션 풀, 트랜잭션 범위를 함께 봐야 개선됩니다.

01

느린 경로 식별

요청 로그에서 route, query name, p95 latency, row count를 묶어 병목 후보를 찾습니다.

observability
02

실행 계획 확인

EXPLAIN으로 seq scan, index scan, join order, estimated rows가 의도와 맞는지 봅니다.

EXPLAIN
03

관계 로딩 분리

ORM eager/lazy loading이 N+1 쿼리를 만들지 않는지 SQL 로그로 확인합니다.

N+1
04

풀 대기 확인

쿼리 자체보다 커넥션 풀 대기 시간이 긴 경우 pool size와 트랜잭션 길이를 봅니다.

pool
05

수정 후 재측정

인덱스 추가, join 변경, batch 처리 후 같은 입력으로 latency와 계획을 다시 비교합니다.

verify
Index
필터와 정렬 경로 최적화 WHERE, ORDER BY, JOIN 조건을 기준으로 복합 인덱스 순서와 선택도를 검토합니다.
쓰기 비용도 확인
N+1
관계 조회 폭증 DataLoader, join fetch, relation id 조회 등으로 반복 쿼리를 묶습니다.
페이지네이션과 같이 검토
Transaction
락과 풀 점유 외부 API 호출이나 긴 계산을 트랜잭션 내부에 넣지 않아 락 보유 시간을 줄입니다.
deadlock 추적

최적화 완료 기준

수치 증거 적용 전후 p95, row count, 실행 계획이 개선되었는지 기록합니다.
회귀 위험 인덱스 추가가 쓰기 성능과 저장 공간에 미치는 영향을 확인합니다.
ORM 투명성 Repository 메서드가 실제로 어떤 SQL을 내는지 로그로 확인합니다.