반응형
몽고DB 조회 속도 개선을 위해 인덱스를 하나둘 걸어 보게 되고
그게 적절한 수준을 넘어서 조잡해지면서 되려 복잡도만 올라가고 효용은 떨어지는 경험을 하게된다
몽고DB 아틀라스에서 자체적으로 인덱스 조합을 추천해주기도 하지만 이 또한 만능은 아니다.
자주 변경되는 요구사항에 대응하며 최적화를 진행해야하는데..
몽고DB에서 권장하는건 ESR
룰이다
E : equlity
S : sort
R : range
이 순서로 인덱스를 건다는 의미인데
정확히 일치하는 필드로 조회,
동등성 검증 후 정렬,
정렬된 데이터들의 범위를 제한해 성능을 개선한다는 것이다.
조회할 데이터의 동등 조건으로 쿼리 대상을 줄인 뒤에 정렬을 배치하면
논블로킹으로 정렬이 가능하다.
몽고DB는 범위 필터 결과에 인덱스 정렬을 수행할 수가 없기 때문에 정렬 이후에 범위를 정해야한다.
기아 자동차의 2020년 이후 출시된 5천만원 이하의 차량을 조회한다고 할 때
복합 인덱스를 아래와 같이 걸어주면 되겠다
(e : brand, s : releasedAt, r: price)
@Document
@CompoundIndex(def = "{'brand': 1, 'releasedAt': 1, 'price': 1}", name = "car_model_year_price_index")
public class Car {
@Id
private String id;
private String brand;
private LocalDateTime releasedAt;
private long price;
}
반응형
'데이터베이스' 카테고리의 다른 글
MySQL - 전문검색 쿼리 (자연어, BOOLEAN) (0) | 2024.10.06 |
---|---|
MySQL - LIKE 문에서 전문검색으로의 전환 (0) | 2024.10.03 |