색인 개요
이 페이지에서는 MongoDB 호환성을 갖춘 Firestore의 색인을 설명합니다. MongoDB 호환성을 갖춘 Firestore는 기본적으로 색인을 만들지 않습니다. 데이터베이스 성능을 개선하려면 가장 자주 사용되는 쿼리에 색인을 만드세요.
색인은 데이터베이스 성능에 큰 영향을 미칩니다. 쿼리에 색인이 있는 경우 데이터베이스는 스캔해야 하는 데이터의 양을 줄이고 결과를 정렬하는 데 필요한 작업을 줄여 결과를 효율적으로 반환할 수 있습니다. 그러나 색인 항목은 색인이 생성된 필드에 대한 쓰기 작업 중에 스토리지 비용과 작업량을 증가시킵니다.
색인 정의 및 구조
색인은 다음으로 구성됩니다.
- 컬렉션 ID
- 지정된 컬렉션의 필드 목록
- 각 필드의 순서(오름차순 또는 내림차순)
색인은 희소 및 다중 키 옵션을 사용 설정할 수도 있습니다.
색인 순서 지정
각 필드의 순서와 정렬 방향은 색인을 고유하게 정의합니다. 예를 들어 다음 색인은 서로 다른 두 색인이며 상호 교환할 수 없습니다.
컬렉션 | 필드 |
---|---|
cities | country (오름차순), population (내림차순) |
cities | population (descending), country (ascending), |
쿼리를 지원하는 색인을 만들 때는 쿼리와 동일한 순서로 필드를 포함합니다.
색인 밀도
기본적으로 색인 항목은 컬렉션의 모든 문서에서 데이터를 저장합니다. 이를 비희소 색인이라고 합니다. 문서에 색인에 지정된 필드가 포함되어 있는지와 관계없이 문서에 색인 항목이 추가됩니다. 존재하지 않는 필드는 색인 항목을 생성할 때 NULL 값이 있는 것으로 취급됩니다. 이 동작을 변경하려면 색인을 스파스 색인으로 정의하면 됩니다.
희소 색인
희소 색인은 색인이 생성된 필드 중 하나 이상의 값 (null 포함)이 포함된 컬렉션의 문서에만 색인을 생성합니다. 스PARSE 색인을 사용하면 스토리지 비용이 줄어들고 성능이 향상될 수 있습니다.
배열 값의 다중 키 색인
배열 값이 포함된 필드에 색인을 만드는 경우 다중 키 색인을 만들어야 합니다. 일반 색인은 배열 값의 색인을 생성할 수 없습니다. 다중 키 색인은 색인 정의에서 최대 1개의 배열 필드를 지원하며 배열 값을 탐색하는 작업에 사용할 수 있습니다.
배열 값에 색인을 생성해야 하는 경우만 다중 키 색인을 사용하세요. 일반 색인은 쿼리를 처리할 때 유리합니다. 예를 들어 일반 색인은 범위 내 값을 더 효율적으로 필터링할 수 있습니다.
배열 값과 다중 키 색인을 사용할 때 다음과 같은 상황이 발생하면 오류가 발생합니다.
- 작업이 일반 색인으로 색인이 생성된 필드에 배열 값을 추가하려고 시도합니다. 배열 값을 추가하려면 해당 필드의 기존 일반 색인을 삭제하고 다중 키 색인으로 다시 만들어야 합니다.
- 배열 값이 포함된 필드에 일반 색인을 만들려고 시도합니다. 다중 키 색인을 만들거나 배열 값을 삭제해야 합니다.
- 작업이 배열 값으로 여러 필드의 색인을 생성하려고 시도합니다. 다중 키 색인에는 배열 값이 있는 필드가 두 개 이상 있을 수 없습니다. 계속하려면 데이터 모델 또는 색인 정의를 수정하세요.
- 두 필드 경로가
users.posts
및users.zip
와 같은 공통 접두사를 공유하는 다중 키 색인을 만들려고 합니다.
색인 빌드 오류 문제 해결
색인을 관리할 때 색인 빌드 오류가 발생할 수 있습니다. 데이터베이스에서 데이터 문제가 발생하면 색인 생성 작업이 실패할 수 있습니다. 색인 생성 작업은 다음과 같은 이유로 실패할 수 있습니다.
- 색인 한도에 도달했습니다. 예를 들어 작업이 문서당 최대 색인 항목 수에 도달했을 수 있습니다. 색인 생성이 실패하면 오류 메시지가 표시됩니다. 색인 한도에 도달하지 않은 경우 색인 작업을 다시 시도하세요.
- 다중 키 색인이 필요합니다. 색인이 지정된 필드 중 하나 이상에 배열 값이 포함되어 있습니다. 계속하려면 다중 키 색인을 사용하거나 배열 값을 삭제해야 합니다.
- 작업이 배열 값으로 여러 필드의 색인을 생성하려고 시도합니다. 다중 키 색인에는 배열 값이 있는 필드가 두 개 이상 있을 수 없습니다. 계속하려면 데이터 모델 또는 색인 정의를 수정하세요.
다음 단계
- 색인 만들기 및 관리 방법 알아보기