Docs Menu
Docs Home
/ / /
C++ 드라이버
/

인덱스 작업

이 페이지의 내용

  • 개요
  • 운영 고려 사항
  • 샘플 데이터
  • 인덱스 만들기
  • 단일 필드 인덱스
  • 인덱스 제거
  • 단일 인덱스 제거
  • 모든 인덱스 제거
  • 추가 정보
  • API 문서

이 가이드 에서는 C++ 운전자 에서 인덱스 를 사용하는 방법을 학습 수 있습니다. 인덱스는 쿼리의 효율성 을 높이고 문서 쿼리 및 저장에 추가 기능을 추가할 수 있습니다.

인덱스가 없으면 MongoDB는 컬렉션의 모든 문서를 스캔하여 각 쿼리와 일치하는 문서를 찾아야 합니다. 이러한 컬렉션 스캔은 속도가 느리고 애플리케이션 성능에 부정적인 영향을 미칠 수 있습니다. 그러나 쿼리에 적합한 인덱스가 있는 경우 MongoDB는 인덱스를 사용하여 검사해야 하는 문서를 제한할 수 있습니다.

쿼리 성능을 향상시키려면 애플리케이션의 쿼리와 정렬된 결과를 반환하는 작업에 자주 나타나는 필드에 인덱스를 빌드 하세요. 추가하는 각 인덱스 는 활성 상태일 때 디스크 공간과 메모리를 사용하므로 용량 계획을 위해 인덱스 메모리와 디스크 사용량을 추적 하는 것이 좋습니다. 또한 쓰기 (write) 작업이 인덱싱된 필드 를 업데이트하면 MongoDB 도 관련 인덱스 를 업데이트합니다.

MongoDB는 동적 스키마를 지원하므로 애플리케이션은 이름을 미리 알 수 없거나 임의적인 필드를 쿼리할 수 있습니다. MongoDB 4.2 은 이러한 쿼리를 지원하는 데 도움이 되는 와일드카드 인덱스 를 도입했습니다. 와일드카드 인덱스는 워크로드 기반 인덱스 계획을 대체하도록 설계되지 않았습니다.

데이터 모델 을 설계하고 애플리케이션 에 적합한 인덱스를 선택하는 방법에 대한 자세한 내용은 MongoDB Server 매뉴얼의 데이터 모델링 및 인덱스 가이드 를 참조하세요.

이 가이드 의 예제에서는 Atlas 샘플 데이터 세트sample_mflix.movies 컬렉션 을 사용합니다. 무료 MongoDB Atlas cluster 를 생성하고 샘플 데이터 세트를 로드하는 방법을 학습 보려면 C++ 드라이버 시작하기를 참조하세요.

MongoDB는 데이터 쿼리를 지원하기 위해 여러 가지 인덱스 유형을 지원합니다. 다음 섹션에서는 가장 일반적인 인덱스 유형을 설명하고 각 인덱스 유형을 생성하기 위한 샘플 코드를 제공합니다.

단일 필드 인덱스 는 컬렉션 문서 내의 단일 필드 에 대한 참조가 있는 인덱스입니다. 단일 필드 쿼리 및 정렬 성능을 개선하고, 일정 시간 후 또는 특정 시계 시간에 컬렉션 에서 문서를 자동으로 제거 하는 TTL (time to live) 인덱스를 지원 합니다. 오름차순의 경우, 내림차순의 경우 를 지정하여 인덱스 항목의 정렬 순서를 지정할 1-1 있습니다.

참고

_id_ 인덱스 는 단일 필드 인덱스 의 예시 입니다. 이 인덱스 는 새 컬렉션 이 생성될 때 _id 필드 에 자동으로 생성됩니다.

다음 예시 에서는 title 필드 에 단일 필드 인덱스 를 오름차순으로 생성합니다.

auto index_specification = make_document(kvp("title", 1));
collection.create_index(index_specification.view());

단일 필드 인덱스에 학습 보려면 MongoDB Server 매뉴얼의 단일 필드 인덱스 를 참조하세요.

_id 필드에서 기본값 고유 인덱스를 제외한 사용하지 않는 인덱스를 제거할 수 있습니다.

다음 섹션에서는 단일 인덱스 를 제거 하는 방법과 컬렉션 의 모든 인덱스를 제거 하는 방법을 보여 줍니다.

컬렉션 에서 인덱스 를 제거 하려면 인덱스 의 인스턴스 또는 인덱스 이름을 drop_one() 메서드에 전달합니다.

다음 예에서는 movies 컬렉션에서 이름이 "title_1" 인 인덱스를 제거합니다.

collection.indexes().drop_one("title_1");

참고

복합 텍스트 인덱스에서 단일 필드를 제거할 수 없습니다. 인덱스된 필드를 업데이트하려면 인덱스를 전부 제거하고 새로운 인덱스를 생성해야 합니다.

MongoDB 4.2 부터는 컬렉션 의 인덱스 뷰에서 drop_all() 메서드를 호출하여 모든 인덱스를 삭제할 수 있습니다.

collection.indexes().drop_all();

이전 버전의 MongoDB 의 경우 컬렉션 의 인덱스 뷰에서 drop_one() 을(를) 호출할 때 "*" 을(를) 매개 변수로 전달합니다.

collection.indexes().drop_one("*");

MongoDB 의 인덱스에 학습 보려면 MongoDB Server 매뉴얼의 인덱스 가이드 를 참조하세요.

이 가이드에서 사용되는 메서드 또는 유형에 대해 자세히 알아보려면 다음 API 설명서를 참조하세요.

돌아가기

인덱스로 쿼리 최적화