AI 에이전트의 경우: 문서 인덱스는 https://www.mongodb.com/ko-kr/docs/llms.txt에서 사용할 수 있으며, 모든 페이지의 마크다운 버전은 어떤 URL 경로에 .md를 추가하여 사용할 수 있습니다.
See how MongoDB 9.0 delivers up to 2x higher throughput.
MongoDB Branding Shape
Register now >
Docs Menu

쿼리 최적화를 위한 인덱스

이 가이드 에서는 최대 절전 모드 ORM용 MongoDB 확장을 사용하여 엔터티에서 단일 필드, 복합 인덱스 및 고유 인덱스를 선언하는 방법을 학습 수 있습니다. 하이버네이트 ORM 확장은 스키마 생성을 활성화 때 엔터티에 선언한 인덱스와 고유 제약 조건을 MongoDB 인덱스 작업으로 변환합니다.

엔터티에 선언된 인덱스 및 고유 제약 조건을 생성하려면 애플리케이션 구성에서 스키마 생성을 활성화 . create 또는 create-drop 조치 사용하여 스키마 생성을 활성화 할 수 있습니다.

  • create: SessionFactory이 닫힐 때 스키마 객체를 삭제하지 않고 생성합니다.

  • create-drop: SessionFactory이 열릴 때 스키마 객체를 생성하고 닫힐 때 삭제합니다.

경고

create-drop 조치 개발 및 테스트를 위한 것입니다. 프로덕션 데이터를 보존해야 하는 경우에는 사용하지 마세요.

Spring Boot를 사용하는 경우 application.properties 파일 에 다음 속성 추가합니다.

spring.jpa.properties.jakarta.persistence.schema-generation.database.action=create-drop

자카르타 지속성을 직접 구성하는 경우 persistence.xml 파일 에 다음 속성 추가합니다.

<property name="jakarta.persistence.schema-generation.database.action"
value="create-drop"/>

또는 hibernate.properties 파일 에서 속성 을 설정하다 수 있습니다.

jakarta.persistence.schema-generation.database.action=create-drop

스키마 생성이 실행되면 하이버네이트 ORM 확장이 컬렉션 생성하고 엔터티가 선언하는 인덱스 및 고유 제약 조건에 대해 MongoDB createIndexes 명령을 실행합니다.

이 가이드 의 예시에서는 다음 Movie 엔티티의 @Table 주석에 @Index 및 @UniqueConstraint 주석을 추가하여 인덱스 및 고유 제약 조건을 선언합니다.

@Entity
@Table(name = "movies")
public class Movie {
@Id
@ObjectIdGenerator
private ObjectId id;
private String title;
private String plot;
private int year;
private List<String> cast;
private List<String> directors;
public Movie(String title, String plot, int year, List<String> cast, List<String> directors) {
this.title = title;
this.plot = plot;
this.year = year;
this.cast = cast;
this.directors = directors;
}
public Movie() {
}
// Getter and setter methods
}

단일 필드 인덱스는 컬렉션 문서 내의 단일 필드 에 대한 참조가 있는 인덱스입니다. 단일 필드 에 대한 쿼리 및 정렬 성능을 향상시킵니다.

다음 예시 year 필드 에 내림차순으로 단일 필드 인덱스 생성합니다.

@Table(
name = "movies",
indexes = {
@Index(name = "idx_year", columnList = "year desc")
})

필드 이름으로 columnList를 설정하고 asc 또는 desc를 추가하여 방향을 지정합니다. 방향을 생략하면 MongoDB 오름차순 인덱스 생성합니다. name 요소는 MongoDB 인덱스 의 이름을 지정합니다.

자세한 내용은 MongoDB 매뉴얼에서 단일 필드 인덱스를 참조하세요.

복합 인덱스에는 컬렉션의 문서 내에 있는 여러 필드에 대한 참조가 포함되어 있어 쿼리 및 정렬 성능을 향상시킵니다.

다음 예시 title 및 year 필드에 내림차순으로 복합 인덱스 생성합니다.

@Table(
name = "movies",
indexes = {
@Index(name = "idx_title_year", columnList = "title desc,year desc")
})

columnList의 필드 순서는 MongoDB 인덱스 키를 정렬하는 순서를 결정하며, 이는 인덱스 지원 수 있는 쿼리 접두사에 영향을 미칩니다. 예시 들어, title 뒤에 year가 오는 인덱스 는 title와만 일치하는 쿼리를 지원 수 있지만, year의 인덱스 title와만 일치하는 쿼리 도움이 되지 않습니다.

자세한 내용은 MongoDB 서버 매뉴얼에서 복합 인덱스를 참조하세요.

고유 인덱스는 인덱싱된 필드에 중복된 값이 저장 않도록 합니다.

@Index 또는 @UniqueConstraint 주석을 사용하여 고유 인덱스 생성할 수 있습니다.

  • 필드 방향과 같은 인덱스 옵션을 지정해야 하는 경우 @Index(unique = true)를 사용합니다.

  • 테이블 수준 제약 조건 모델을 사용하려면 @UniqueConstraint을(를) 사용하세요. columnNames의 필드는 키 순서를 정의하고 @UniqueConstraint는 필드 방향을 지정하지 않으므로 결과 고유 인덱스 오름차순입니다.

다음 예시 title 필드 에 고유 인덱스 생성합니다.

@Table(
name = "movies",
indexes = {
@Index(name = "idx_title", columnList = "title", unique = true)
})

다음 예시 title 및 plot 필드에 고유 제약 조건을 생성합니다.

@Table(
name = "movies",
uniqueConstraints = {
@UniqueConstraint(name = "uk_title_plot", columnNames = {"title", "plot"})
})

MongoDB 인덱싱된 필드 의 null 또는 누락된 값을 인덱싱된 값으로 처리합니다. 고유 제약 조건으로 인해 단일 필드 고유 인덱스 에는 인덱스 항목 에 null 값이 있는 문서 하나만 포함될 수 있습니다.

중요

고유 인덱스 생성이 실패할 수 있음

컬렉션 에 해당 필드에 대해 중복된 값이 있는 문서가 이미 포함되어 있는 경우 MongoDB 지정된 필드 에 고유 인덱스 생성할 수 없습니다. 고유 인덱스 만들기 전에 기존 데이터에 중복된 값이 있는지 검토합니다.

자세한 내용은 MongoDB Server 매뉴얼의 고유 인덱스를 참조하세요.

엔터티를 만들고 포함된 데이터를 매핑하는 방법에 대해 자세히 학습 컬렉션을 나타내는 엔터티 만들기 가이드 참조하세요.

엔터티를 사용하여 데이터베이스 작업을 실행 방법을 학습 CRUD 작업 수행 및 쿼리 지정 가이드를 참조하세요.

하이버네이트 ORM 확장이 지원하는 인덱스 유형 목록을 보려면 기능 호환성 페이지를 참조하세요.

이 가이드 에 사용된 자카르타 지속성 어노테이션에 대해 자세히 학습 보려면 자카르타 지속성 API 문서를 참조하세요.