Database/NoSQL

[MongoDB] 인덱스 설계 법칙과 쿼리 튜닝을 위한 실행 계획 분석

lumination 2025. 6. 16. 17:14
db.orders.createIndex({userId : 1, status : 1, createdAt : -1})

db.orders.find({userId : 123, status: "paid"}).explain("executionstats")

------

IXSCAN : 인덱스 스캔이 발생 (제대로 사용)
COLLSCAN : 전체 컬렉션을 스캔 (인덱스를 미사용)
FETCH : 인덱스에서 찾은 문서를 읽었다.
SROT : 인덱스를 사용해서 정렬으 하지 못했다.

nReturned : 실제로 반환되는 문서의 수
totalkeysExamined : 인덱스에서 검사한 엔트리의 갯수 (작을 수록 효율적)
totalDocsExamined : 실제 문서를 몇개 읽었는지 (작을 수록 효율적)
executionTimeMillis : latency

1. IXSCAN 사용  + totalDeocsExamined == nRetunred : 최적
2. COLLSCAN 사용 + totalDocExamined  > nReturned : 인덱스를 추가 하거나 튜닝이 필요
3. IXSCAN + SORT -> 정렬하는 필드가 인덱스에 포함이 되어 있는지 확인필요