문서 메뉴
문서 홈
/
MongoDB 매뉴얼
/ /

복합 인덱스

이 페이지의 내용

  • 사용 사례
  • 시작하기
  • 세부 정보
  • 필드 제한
  • 필드 순서
  • 정렬 순서
  • 해시 인덱스 필드
  • 인덱스 접두사
  • 희소 복합 인덱스
  • 자세히 알아보기

복합 인덱스은 컬렉션에 있는 각 문서에 있는 둘 이상의 필드에서 데이터를 수집하고 정렬합니다. 데이터는 인덱스의 첫 번째 필드별로 그룹화된 다음 각 후속 필드별로 그룹화됩니다.

예를 들어 다음 이미지는 문서가 먼저 userid 기준 오름차순(알파벳순)으로 그룹화되는 복합 인덱스를 보여줍니다. 그런 다음 각 userid 에 대한 scores 를 내림차순으로 정렬합니다:

'userid' 필드(오름차순) 및 'score' 필드(내림차순)에 대한 복합 인덱스 다이어그램입니다. 인덱스는 먼저 'userid' 필드를 기준으로 정렬한 다음 'score' 필드를 기준으로 정렬합니다.

일반적으로 쿼리되는 필드를 인덱싱하면 쿼리 가 포함될 가능성이 높아집니다. 커버 쿼리는 인덱스만으로 만족할 수 있는 쿼리로, 문서를 검사할 필요가 없어 성능이 크게 향상됩니다.

복합 인덱스를 생성하려면 다음 프로토타입을 사용합니다.

db.<collection>.createIndex( {
<field1>: <sortOrder>,
<field2>: <sortOrder>,
...
<fieldN>: <sortOrder>
} )

MongoDB Atlas에서 호스팅되는 배포서버를 위해 UI에서 복합 인덱스를 생성하고 관리할 수 있습니다.

애플리케이션이 여러 필드가 포함된 쿼리를 반복적으로 실행하는 경우, 해당 쿼리의 성능을 개선하기 위해 복합 인덱스를 생성할 수 있습니다. 예를 들어, 식료품점 관리자는 재고가 부족한 품목을 파악하기 위해 이름과 수량으로 재고 품목을 자주 조회할 수 있습니다. 쿼리 성능을 향상시키기 위해 itemquantity 필드에 복합 인덱스을 생성할 수 있습니다.

자주 쿼리하는 필드에 대한 복합 인덱스를 사용하면 해당 쿼리를 포괄할 가능성이 높아집니다. 포함된 쿼리는 문서를 검사하지 않고도 인덱스를 사용하여 완전히 충족할 수 있는 쿼리입니다. 이렇게 하면 쿼리 성능이 최적화됩니다.

복합 인덱스를 만들려면 복합 인덱스 만들기를 참조하세요.

이 섹션에서는 복합 인덱스에 대한 기술적 세부 사항과 제한 사항에 대해 설명합니다.

단일 복합 인덱스에는 최대 32개의 필드가 포함될 수 있습니다.

인덱스된 필드의 순서는 복합 인덱스의 효율성에 영향을 미칩니다. 복합 인덱스에는 인덱스의 필드 순서에 따라 문서에 대한 참고가 포함됩니다. 효율적인 복합 인덱스를 만들려면 ESR(동등, 정렬, 범위) 규칙을 따르세요.

인덱스는 오름차순(1) 또는 내림차순(-1) 정렬 순서로 필드에 대한 참조를 저장합니다. 복합 인덱스의 경우 정렬 순서에 따라 인덱스가 정렬 작업을 지원하는지 여부가 결정될 수 있습니다. 자세한 내용은 복합 인덱스 정렬 순서를 참조하세요.

복합 인덱스에는 단일 해시 인덱스 필드가 포함될 수 있습니다.

인덱스 접두사는 인덱싱된 필드의 시작 부분 집합입니다. 복합 인덱스는 인덱스 접두사에 포함된 모든 필드에 대한 쿼리를 지원합니다.

예를 들어 이 복합 인덱스를 생각해 볼 수 있습니다:

{ "item": 1, "location": 1, "stock": 1 }

인덱스에는 이러한 인덱스 접두사가 있습니다:

  • { item: 1 }

  • { item: 1, location: 1 }

MongoDB는 복합 인덱스를 사용하여 다음 필드 조합에 대한 쿼리를 지원할 수 있습니다.

  • item

  • item 개인정보 정책에 location

  • item, location, stock

MongoDB는item필드가 접두사에 해당하므로 stock, item필드에 대한 쿼리를 지원하기 위해 인덱스를 사용할 수 있습니다. 그러나 인덱스의 item 필드만 이 쿼리를 지원할 수 있습니다. 쿼리에서 location 다음에 오는 stock 필드를 사용할 수 없습니다.

인덱스 필드는 순서대로 구문 분석되며, 쿼리에서 인덱스 접두사를 생략하면 해당 접두사 뒤에 오는 인덱스 필드를 사용할 수 없습니다.

MongoDB는 복합 인덱스를 사용하여 다음 필드 조합에 대한 쿼리를 지원할 수 없습니다 .

  • location

  • stock

  • location 개인정보 정책에 stock

item 필드가 없으면 앞의 필드 조합 중 어느 것도 접두사 인덱스에 해당하지 않습니다.

중복 인덱스 제거

복합 인덱스와 접두사에 인덱스가 모두 있는 컬렉션(예: { a: 1, b: 1 }{ a: 1 })에서 어느 인덱스에도 희소(sparse) 또는 고유(unique) 제약 조건이 없는 경우 접두사({ a: 1 })에 대한 인덱스를 제거할 수 있습니다. MongoDB는 접두사 인덱스를 사용했던 모든 상황에서 복합 인덱스를 사용합니다.

복합 인덱스에는 다양한 유형의 희소 인덱스가 포함될 수 있습니다. 인덱스 유형의 조합이 복합 인덱스가 문서를 어떻게 매칭하는지 결정합니다.

이 표에는 다양한 유형의 희소 인덱스가 포함된 복합 인덱스의 동작이 요약되어 있습니다.

복합 인덱스 구성 요소
컴파운드 인덱스 동작
오름차순 인덱스
내림차순 인덱스
적어도 하나의 키에 대한 값을 포함하는 문서만 인덱싱합니다.
오름차순 인덱스
내림차순 인덱스
문서에 geospatial 필드 중 하나에 대한 값이 포함된 경우에만 문서를 인덱싱합니다. 오름차순 또는 내림차순 인덱스의 문서는 인덱싱하지 않습니다.
오름차순 인덱스
내림차순 인덱스
text 필드 중 하나와 일치하는 경우에만 문서의 인덱스를 생성합니다. 오름차순 또는 내림차순 인덱스의 문서를 인덱싱하지 않습니다.

효율적인 복합 인덱스를 만드는 방법을 알아보려면 ESR(동일, 정렬, 범위) 규칙을 참조하세요.

← 포함된 문서에 인덱스 만들기