느린 조회는 네 질문으로 먼저 좁힌다

인덱스, N+1, 페이지네이션, projection은 NestJS ORM 병목을 빠르게 분류하는 1차 판단 기준입니다.

얼마나 읽는가

rows read와 반환 row 수를 분리해서 봅니다.

몇 번 왕복하는가

같은 SQL 반복과 관계 로딩 방식을 봅니다.

무엇을 반환하는가

화면에 없는 컬럼과 관계를 줄입니다.

어디서 기다리는가

정렬, 락, 네트워크 전송을 함께 봅니다.

Index

큰 scan을 만드는 WHERE/ORDER BY를 줄입니다.

N+1

반복 SQL은 join 또는 batch loading으로 바꿉니다.

Pagination

대량 row를 한 번에 가져오지 않습니다.

Projection

SELECT *와 큰 컬럼을 필요한 값으로 줄입니다.

1. 로그

반복 SQL과 느린 SQL을 찾습니다.

2. 계획

EXPLAIN으로 rows와 index를 봅니다.

3. 변경

가장 작은 레버부터 바꿉니다.

4. 검증

전후 지표가 좋아졌는지 확인합니다.

핵심: 먼저 병목 유형을 좁히고, 가장 작은 변경으로 하나씩 확인한다.