Indexes
이 페이지의 내용
인덱스는 MongoDB에서 쿼리를 효율적으로 실행할 수 있도록 지원합니다. 인덱스가 없는 경우 MongoDB는 컬렉션의 모든 문서를 스캔하여 쿼리 결과를 반환해야 합니다. 쿼리에 적합한 인덱스가 있는 경우 MongoDB는 인덱스를 사용하여 스캔해야 하는 문서 수를 제한합니다.
인덱스는 쿼리 성능을 향상시키지만 인덱스를 추가하면 쓰기 작업의 성능에 부정적인 영향을 미칩니다. 쓰기 대 읽기 비율이 높은 컬렉션의 경우 각 삽입은 인덱스도 업데이트해야 하므로 비용이 많이 듭니다.
사용 사례
애플리케이션이 동일한 필드에서 반복적으로 쿼리를 실행하는 경우 해당 필드에 인덱스를 생성하여 성능을 개선할 수 있습니다. 예를 들어 다음 시나리오를 가정해 보겠습니다.
Scenario | 인덱스 유형 |
---|---|
인사부에서는 직원 ID로 직원을 검색해야 하는 경우가 많습니다. 쿼리 성능을 향상시키기 위해 직원 ID 필드에 인덱스를 생성할 수 있습니다. | |
영업 사원은 위치별로 고객 정보를 조회해야 하는 경우가 많습니다. 위치는 내장된 문서에 인덱스를 만들면 내장된 문서 전체를 지정하는 쿼리만 인덱스를 사용합니다. 문서 내의 특정 필드에 대한 쿼리는 인덱스를 사용하지 않습니다. | 내장된 문서의 단일 필드 인덱스 |
식료품점 관리자는 재고가 부족한 품목을 파악하기 위해 이름과 수량으로 재고 품목을 자주 조회할 수 있습니다. 쿼리 성능을 향상시키기 위해 item 및 quantity 필드에 단일 인덱스을 생성할 수 있습니다. |
시작하기
MongoDB Atlas에서 드라이버 메서드 또는 MongoDB Shell을 사용하여 인덱스를 생성하고 관리할 수 있습니다. MongoDB Atlas는 클라우드에서의 MongoDB 배포서버를 위한 완전 관리형 서비스입니다.
MongoDB Atlas에서 인덱스 생성 및 관리
MongoDB Atlas에서 호스팅되는 배포의 경우, MongoDB Atlas UI 또는 Atlas CLI를 사용하여 인덱스를 생성하고 관리할 수 있습니다. MongoDB Atlas에는 느린 쿼리를 개선하기 위한 인덱스를 추천하고, 영향을 기준으로 추천 인덱스의 순위를 지정하고, 삭제할 인덱스를 권장하는 Performance Advisor도 포함되어 있습니다.
MongoDB Atlas UI 또는 Atlas CLI에서 인덱스를 생성하고 관리하는 방법에 관한 자세한 내용은 인덱스 생성, 보기, 제거 및 숨기기를 참조하세요.
MongoDB Atlas Performance Advisor에 관한 자세한 내용은 느린 쿼리 모니터링 및 개선을 참조하세요.
드라이버 메서드 또는 MongoDB Shell을 사용한 인덱스 생성 및 관리
드라이버 메서드 또는 MongoDB Shell을 사용하여 인덱스를 생성하고 managed 수 있습니다. 자세히 알아보려면 이 페이지의 리소스를 참조하세요.
세부 정보
인덱스는 컬렉션 데이터 집합의 일부분을 탐색하기 쉬운 형태로 저장하는 특수 데이터 구조입니다. MongoDB 인덱스는 B-트리 데이터 구조를 사용합니다.
인덱스는 특정 필드 또는 필드 세트의 값을 필드 값에 따라 정렬하여 저장합니다. 인덱스 항목의 순서는 효율적인 동등성 매치 및 범위 기반 쿼리 작업을 지원합니다. 또한 MongoDB는 인덱스의 순서를 사용하여 정렬된 결과를 반환할 수 있습니다.
다음 다이어그램은 인덱스를 사용하여 일치하는 문서를 선택하고 정렬하는 쿼리를 보여줍니다.
기본적으로 MongoDB의 인덱스는 다른 데이터베이스 시스템의 인덱스와 유사합니다. MongoDB는 컬렉션 수준에서 인덱스를 정의하고 MongoDB 컬렉션에 있는 문서의 모든 필드 또는 하위 필드에 대한 인덱스를 지원합니다.
Default _id
Index
MongoDB는 컬렉션 생성 중에 _id 필드에 고유 인덱스 를 생성합니다. _id
인덱스는 클라이언트가 _id
필드에 동일한 값을 가진 두 문서를 삽입하는 것을 방지합니다. 이 인덱스는 _id
필드에 삭제할 수 없습니다.
참고
샤드 cluster 에서 필드를 샤드 _id
키로 사용하지 않는 경우 애플리케이션은 오류를 방지하기 위해 _id
필드 값의 고유성을 보장 해야 합니다. 이 작업은 대부분 자동 생성된 표준 ObjectId를 사용하여 수행됩니다.
인덱스 만들기
➤ 오른쪽 상단의 언어 선택 드롭다운 메뉴를 사용하여 이 페이지에 있는 예시의 언어를 설정하세요.
mongo shell 에서 인덱스를 만들려면 db.collection.createIndex()
를 사용합니다.
db.collection.createIndex( <key and index type specification>, <options> )
다음 예에서는 name
필드에 단일 키 내림차순 인덱스를 생성합니다.
db.collection.createIndex( { name: -1 } )
db.collection.createIndex()
메서드는 동일한 사양의 인덱스 가 아직 존재하지 않는 경우에만 인덱스 를 생성합니다.
중요
MongoDB Compass에서 컬렉션에 인덱스를 생성하려면 컬렉션에 문서가 포함되어 있어야 합니다.
MongoDB Compass에서 인덱스를 생성하려면 다음을 수행합니다.
선택 사항. 인덱스 옵션을 지정합니다.
Compass는 다음과 같은 인덱스 옵션을 지원합니다:
옵션 | 설명 | 자세한 정보 | |
---|---|---|---|
배경 에서 인덱스 빌드 | 이 옵션을 선택하면 인덱스 빌드 작업 중에 MongoDB deployment 계속 사용할 수 있는지 확인합니다. | ||
고유 인덱스 만들기 | 이 옵션을 선택하면 인덱싱된 필드에 중복 값이 저장 되지 않는지 확인합니다. | ||
TTL만들기 | 이 옵션을 선택하면 인덱싱된 필드 값 이후 지정된 시간(초)이 지나면 문서를 자동으로 삭제합니다. | ||
부분 필터 표현식 | 이 옵션을 선택하면 지정된 필터하다 표현식 과 일치하는 문서만 인덱스 합니다. 예를 예시 다음 부분 필터하다 표현식 은
| ||
사용자 지정 데이터 정렬 사용 | 이 옵션을 선택하면 Compass 에서 제공하는 옵션을 사용하여 인덱스 에 대한 사용자 지정 데이터 정렬을 생성합니다. | ||
와일드카드 프로젝션 | 이 옵션을 선택하면 인덱스에 지정된 프로젝션과 일치하는 알 수 없거나 임의의 필드를 지원합니다. |
.NET 드라이버를 사용하여 인덱스를 만들려면 MongoCollection.CreateIndex를 사용합니다.
collection.CreateIndex( IndexKeys<collection>.<key and index type specification>, <options> );
다음 예에서는 name
필드에 단일 키 내림차순 인덱스를 생성합니다.
collection.CreateIndex( IndexKeys<collection>.Descending("name") );
MongoCollection.CreateIndex 메서드는 동일한 사양의 인덱스 가 아직 존재하지 않는 경우에만 인덱스 를 생성합니다.
Async Java 드라이버를 사용하여 인덱스를 만들려면 com.mongodb.async.client.MongoCollection.createIndex를 사용합니다.
collection.createIndex( <key and index type specification>, <options>, <callbackFunction>)
다음 예에서는 name
필드에 단일 키 내림차순 인덱스를 생성합니다.
collection.createIndex(Indexes.descending("name"), someCallbackFunction());
com.mongodb. 비동기. 클라이언트 .MongoCollection.createIndex 메서드는 동일한 사양의 인덱스 가 아직 존재하지 않는 경우에만 인덱스 를 생성합니다.
Java 드라이버를 사용하여 인덱스를 작성하려면 com.mongodb.client.MongoCollection.createIndex를 사용하세요.
collection.createIndex( <key and index type specification>, <options> )
다음 예에서는 name
필드에 단일 키 내림차순 인덱스를 생성합니다.
collection.createIndex(Indexes.descending("name"));
com.mongodb.client.MongoCollection.createIndex. 메서드는 동일한 사양의 인덱스가 아직 존재하지 않는 경우에만 인덱스를 생성합니다.
Motor 드라이버를 사용하여 인덱스를 생성하려면 motor.motor_asyncio.AsyncIOMotorCollection.create_index
를 사용합니다.
await db.collection.create_index([(<key and index type specification>)], <options> )
다음 예에서는 name
필드에 단일 키 내림차순 인덱스를 생성합니다.
await collection.create_index([("name", pymongo.DESCENDING)])
motor.motor_asyncio.AsyncIOMotorCollection.create_index
메서드는 동일한 사양의 인덱스 가 아직 존재하지 않는 경우에만 인덱스 를 생성합니다.
Node.JS 드라이버를 사용하여 인덱스를 생성하려면 createIndex()
을(를) 사용합니다.
collection.createIndex( { <key and index type specification> }, function(err, result) { console.log(result); callback(result); }
다음 예에서는 name
필드에 단일 키 내림차순 인덱스를 생성합니다.
collection.createIndex( { name : -1 }, function(err, result) { console.log(result); callback(result); }
createIndex()
메서드는 동일한 사양의 인덱스가 아직 존재하지 않는 경우에만 인덱스를 생성합니다.
Perl 드라이버를 사용하여 인덱스를 만들려면 create_one()
my $indexes = $db->get_collection( <collection> )->indexes; $indexes->create_one( [ <key and index type specification> ] );
다음 예에서는 name
필드에 단일 키 내림차순 인덱스를 생성합니다.
my $indexes = $db->get_collection( <collection> )->indexes; $indexes->create_one( [ name => -1 ] );
create_one() 메서드는 동일한 사양의 인덱스 가 아직 존재하지 않는 경우에만 인덱스 를 생성합니다.
PHP 드라이버 를 사용하여 인덱스를 만들려면 MongoDB\\Collection::createIndex()
을(를) 사용합니다.
$collection->createIndex(<key and index type specification>, <options>);
다음 예에서는 name
필드에 단일 키 내림차순 인덱스를 생성합니다.
$collection->createIndex(['name' => -1]);
MongoDB\\Collection::createIndex()
메서드는 동일한 사양의 인덱스가 아직 존재하지 않는 경우에만 인덱스를 생성합니다.
PyMongo Python 드라이버 를 사용하여 인덱스를 생성하려면 , 을(를)pymongo.collection.Collection.create_index
사용하세요.
db.collection.create_index([(<key and index type specification>)], <options> )
다음 예에서는 name
필드에 단일 키 내림차순 인덱스를 생성합니다.
collection.create_index([("name", pymongo.DESCENDING)])
pymongo.collection.Collection.create_index
메서드는 동일한 사양의 인덱스 가 아직 존재하지 않는 경우에만 인덱스 를 생성합니다.
Ruby 드라이버를 사용하여 인덱스를 만들려면 Mongo::Index::View#create_one을 사용하세요.
client[:collection].indexes.create_one({ <key and index type specification> }, {options})
다음 예에서는 name
필드에 단일 키 내림차순 인덱스를 생성합니다.
client[:collection].indexes.create_one({ name: -1 })
Mongo::Index::View#create_one 메서드는 동일한 사양의 인덱스 가 아직 존재하지 않는 경우에만 인덱스 를 생성합니다.
Scala 드라이버를 사용하여 인덱스를 만들려면 org.mongodb.scala.model.Indexes를 사용합니다.
collection.createIndex(<key and index type specification>)
다음 예에서는 name
필드에 단일 키 내림차순 인덱스를 생성합니다.
collection.createIndex(descending("name"))
org.mongodb.scala.model.Indexes 메서드는 동일한 사양의 인덱스 가 아직 존재하지 않는 경우에만 인덱스 를 생성합니다.
[1] | MongoDB 인덱스는 B-트리 데이터 구조를 사용합니다. |
인덱스 이름
인덱스의 기본 이름은 밑줄을 구분자로 사용하여 인덱싱된 키와 인덱스에서의 각 키 방향(예: 1 또는 -1)을 연결한 것입니다. 예를 들어 { item : 1, quantity: -1 }
에 생성된 인덱스의 이름은 item_1_quantity_-1
입니다.
기본값보다 사람이 더 읽기 쉬운 사용자 지정 이름(예: 사용자 지정 이름)을 사용하여 인덱스를 생성할 수 있습니다. 예를 들어, 기존 인벤토리의 데이터를 채우기 위해 products
collection을 자주 쿼리 애플리케이션을 생각해 보겠습니다. createIndex()
다음 메서드는 item
및 에 라는 인덱스를 생성합니다.quantity
query for
inventory
db.products.createIndex( { item: 1, quantity: -1 } , { name: "query for inventory" } )
db.collection.getIndexes()
메서드를 사용하여 인덱스 이름을 볼 수 있습니다. 생성된 인덱스의 이름은 변경할 수 없습니다. 대신 인덱스를 삭제하고 새 이름으로 다시 생성해야 합니다.
인덱스 유형
MongoDB는 특정 유형의 데이터 및 쿼리를 지원하기 위해 다양한 인덱스 유형을 제공합니다.
단일 필드
MongoDB에서 정의한 _id
인덱스 외에도 MongoDB는 문서의 단일 필드에 대해 사용자 정의 오름차순/내림차순 인덱스 생성을 지원합니다.
단일 필드 인덱스 및 정렬 작업의 경우 정렬 순서(예: MongoDB는 어느 방향으로든 인덱스를 탐색할 수 있으므로 인덱스 키의 오름차순 또는 내림차순)는 중요하지 않습니다.
복합 인덱스
MongoDB는 여러 필드, 즉 복합 인덱스에서 사용자 정의 인덱스도 지원합니다.
복합 인덱스에 나열된 필드의 순서는 중요합니다. 예를 들어 복합 인덱스가 { userid: 1, score: -1 }
로 구성된 경우, 인덱스는 먼저 userid
을 기준으로 정렬한 다음 각 userid
값 내에서 score
을 기준으로 정렬합니다.
복합 인덱스 및 정렬 작업의 경우 정렬 순서(예: 오름차순 또는 내림차순)은 인덱스 키가 인덱스가 정렬 작업을 지원할 수 있는지 여부를 결정할 수 있습니다. 복합 인덱스에서 인덱스 순서가 결과에 미치는 영향에 대한 자세한 내용은 정렬 순서 를 참조하세요.
다음도 참조하세요.
Multikey Index
MongoDB는 멀티키 인덱스 를 사용하여 배열에 저장된 콘텐츠를 인덱싱합니다. 배열 값이 포함된 필드를 인덱싱하는 경우, MongoDB는 배열의 모든 고유 요소에 대해 별도의 인덱스 항목을 생성합니다. 이러한 멀티키 인덱스 를 사용하면 쿼리에서 배열의 요소를 일치시켜 배열이 포함된 문서를 선택할 수 있습니다. MongoDB는 인덱싱된 필드에 배열 값이 포함된 경우 다중 키 인덱스를 만들지 여부를 자동으로 결정합니다. 즉, 멀티키 유형을 명시적으로 지정할 필요가 없습니다.
멀티키 인덱스에 대한 자세한 내용은 멀티키 인덱스 및 멀티키 인덱스 바운드 를 참조하세요.
지리 공간적 인덱스
지리 공간적 좌표 데이터의 효율적인 쿼리를 지원하기 위해 MongoDB는 두 가지 특수 인덱스, 즉 결과를 반환할 때 평면 기하학을 사용하는 2d 인덱스 와 구형 기하학을 사용하여 결과를 반환하는 2dsphere 인덱스 를 제공합니다.
이 인덱스는 희소 인덱스 입니다. 희소 인덱스를 사용하여 복합 인덱스 를 만들려면 먼저 희소 복합 인덱스 사용에 대한 특별 고려 사항을 검토하세요.
지리 공간적 인덱스에 대한 간략한 소개는 지리 공간적 인덱스를 참조하세요.
텍스트 검색 인덱스
MongoDB Atlas에서 호스팅되는 데이터의 경우 Atlas Search 인덱스를 사용하여 전체 텍스트 검색을 지원할 수 있습니다. 자세한 내용은 Atlas Search 인덱스 생성을 참조하세요.
(Atlas가 아닌) 자체 관리 배포서버의 경우, MongoDB 는 컬렉션 에서 string 콘텐츠 검색을 지원하는 text
인덱스 유형을 제공합니다. 자체 관리형 텍스트 인덱스에 학습 보려면 자체 관리형 배포의 텍스트 인덱스를 참조하세요.
이 인덱스는 희소 인덱스 입니다. 희소 인덱스를 사용하여 복합 인덱스 를 만들려면 먼저 희소 복합 인덱스 사용에 대한 특별 고려 사항을 검토하세요.
해시 인덱스
해시 기반 샤딩 을 지원하기 위해 MongoDB는 필드 값의 해시를 인덱싱하는 해시 인덱스 유형을 제공합니다. 이러한 인덱스는 범위에 따라 값이 더 무작위로 분포되지만 동등성 매치 만 지원하며 범위 기반 쿼리는 지원할 수 없습니다.
클러스터화된 인덱스
MongoDB 5.3부터는 클러스터형 컬렉션을 사용하여 컬렉션을 만들 수 있습니다. 클러스터형 인덱스를 사용하여 만든 컬렉션을 클러스터형 인덱스라고 합니다.
클러스터형 컬렉션을 참조하세요.
와일드카드 인덱스
MongoDB 4.2부터는 와일드카드 인덱스를 사용하여 여러 필드, 임의 필드 또는 알 수 없는 필드에 대한 쿼리를 지원할 수 있습니다. 와일드카드 인덱스를 만들 때 $**
를 지정하여 모든 필드 또는 모든 값을 나타내면 단일 명령으로 다음을 인덱싱할 수 있습니다.
필드의 모든 값
문서의 모든 필드
특정 필드 경로를 제외한 문서의 모든 필드
문서의 여러 특정 필드
자세한 내용은 와일드카드 인덱스를 참조하세요.
색인 속성
Unique Indexes
인덱스의 고유한 속성으로 인해 MongoDB는 인덱싱된 필드에 대해 중복된 값을 거부합니다. 고유 제약 조건 외에 고유 인덱스는 다른 MongoDB 인덱스와 기능적으로 상호 교환 가능합니다.
부분 인덱스
부분 인덱스 는 지정된 필터 표현식을 충족하는 collection의 문서만 인덱싱합니다. collection에 있는 문서의 하위 집합을 인덱싱하면 부분 인덱스의 스토리지 요구 사항이 줄어들고 인덱스 생성 및 유지 관리에 드는 성능 비용이 절감됩니다.
부분 인덱스는 희소 인덱스 기능의 상위 세트를 제공하므로 희소 인덱스보다 선호됩니다.
희소 인덱스
인덱스의 희소 속성은 인덱스에 인덱스된 필드가 있는 문서에 대한 항목만 포함하도록 합니다. 인덱스는 인덱싱된 필드 가 없는 문서를 건너뜁니다.
희소 인덱스 옵션과 고유 인덱스 옵션을 결합하여 인덱싱된 필드에 중복된 값이 있는 문서를 삽입하는 것을 방지하고 인덱싱된 필드가 없는 문서의 인덱싱을 건너뛸 수 있습니다.
TTL Indexes
TTL 는 MongoDB가 일정 시간이 지나면 collection에서 문서를 자동으로 제거하는 데 사용할 수 있는 특수 인덱스입니다. 이는 시스템에서 생성한 이벤트 데이터, 로그, 세션 정보와 같이 데이터베이스에 한정된 기간 동안만 유지되는 특정 유형의 정보에 이상적입니다.
구현 지침은 TTL을 설정하여 컬렉션에서 데이터 만료를 참조하세요.
Hidden Indexes
버전 4.4에 추가되었습니다.
숨겨진 인덱스는 쿼리 플래너에 표시되지 않으며 쿼리를 지원하는 데 사용할 수 없습니다.
플래너에서 인덱스를 숨김으로써 사용자는 실제로 인덱스를 제거하지 않고도 인덱스 제거로 인한 잠재적인 영향을 평가할 수 있습니다. 영향이 부정적인 경우 사용자는 제거된 인덱스를 다시 생성할 필요 없이 인덱스 숨기기를 해제할 수 있습니다. 그리고 인덱스는 숨겨진 동안 완전히 유지되므로 숨김이 해제되면 인덱스를 즉시 사용할 수 있습니다.
_id
인덱스를 제외한 모든 인덱스를 숨길 수 있습니다.
인덱스 사용하기
인덱스는 읽기 작업의 효율성을 향상시킬 수 있습니다. 쿼리 성능 분석 튜토리얼에서는 인덱스가 있는 쿼리와 인덱스가 없는 쿼리의 실행 통계 예제를 제공합니다.
MongoDB가 사용할 인덱스를 선택하는 방법에 대한 자세한 내용은 쿼리 옵티마이저를 참조하세요.
인덱스 및 데이터 정렬
데이터 정렬을 사용하면 대소문자 및 악센트 표시 규칙과 같은 문자열 비교에 대한 언어별 규칙을 지정할 수 있습니다.
참고
다음 예제는 mongosh
의 인덱스 및 데이터 정렬을 보여줍니다.
Compass에서 인덱스와 함께 사용자 지정 데이터 정렬을 사용하는 방법에 대한 지침은 MongoDB Compass 설명서 Compass 참조하세요.
참고
다음 예제는 mongosh
의 인덱스 및 데이터 정렬을 보여줍니다.
특정 드라이버에서 데이터 정렬을 사용하여 인덱스를 만드는 방법에 대한 지침은 드라이버 설명서 를 참조하세요.
참고
다음 예제는 mongosh
의 인덱스 및 데이터 정렬을 보여줍니다.
특정 드라이버에서 데이터 정렬을 사용하여 인덱스를 만드는 방법에 대한 지침은 드라이버 설명서 를 참조하세요.
참고
다음 예제는 mongosh
의 인덱스 및 데이터 정렬을 보여줍니다.
특정 드라이버에서 데이터 정렬을 사용하여 인덱스를 만드는 방법에 대한 지침은 드라이버 설명서 를 참조하세요.
참고
다음 예제는 mongosh
의 인덱스 및 데이터 정렬을 보여줍니다.
특정 드라이버에서 데이터 정렬을 사용하여 인덱스를 만드는 방법에 대한 지침은 드라이버 설명서 를 참조하세요.
참고
다음 예제는 mongosh
의 인덱스 및 데이터 정렬을 보여줍니다.
특정 드라이버에서 데이터 정렬을 사용하여 인덱스를 만드는 방법에 대한 지침은 드라이버 설명서 를 참조하세요.
참고
다음 예제는 mongosh
의 인덱스 및 데이터 정렬을 보여줍니다.
특정 드라이버에서 데이터 정렬을 사용하여 인덱스를 만드는 방법에 대한 지침은 드라이버 설명서 를 참조하세요.
참고
다음 예제는 mongosh
의 인덱스 및 데이터 정렬을 보여줍니다.
특정 드라이버에서 데이터 정렬을 사용하여 인덱스를 만드는 방법에 대한 지침은 드라이버 설명서 를 참조하세요.
참고
다음 예제는 mongosh
의 인덱스 및 데이터 정렬을 보여줍니다.
특정 드라이버에서 데이터 정렬을 사용하여 인덱스를 만드는 방법에 대한 지침은 드라이버 설명서 를 참조하세요.
참고
다음 예제는 mongosh
의 인덱스 및 데이터 정렬을 보여줍니다.
특정 드라이버에서 데이터 정렬을 사용하여 인덱스를 만드는 방법에 대한 지침은 드라이버 설명서 를 참조하세요.
참고
다음 예제는 mongosh
의 인덱스 및 데이터 정렬을 보여줍니다.
특정 드라이버에서 데이터 정렬을 사용하여 인덱스를 만드는 방법에 대한 지침은 드라이버 설명서 를 참조하세요.
문자열 비교에 인덱스를 사용하려면 작업에서 동일한 데이터 정렬도 지정해야 합니다. 즉, 작업에서 다른 데이터 정렬을 지정하는 경우 데이터 정렬이 있는 인덱스는 인덱싱된 필드에서 문자열 비교를 수행하는 작업을 지원할 수 없습니다.
경고
데이터 정렬로 구성된 인덱스는 ICU 데이터 정렬 키를 사용하여 정렬 순서를 지정하므로, 데이터 정렬이 없는 인덱스의 경우 데이터 정렬 인식 인덱스 키가 인덱스 키보다 클 수 있습니다.
예를 들어, 컬렉션 myColl
에는 대조 국가 및 언어 설정이 "fr"
인 문자열 필드 category
에 대한 색인이 있습니다.
db.myColl.createIndex( { category: 1 }, { collation: { locale: "fr" } } )
인덱스와 동일한 데이터 정렬을 지정하는 다음 쿼리 작업에서는 인덱스를 사용할 수 있습니다.
db.myColl.find( { category: "cafe" } ).collation( { locale: "fr" } )
하지만 기본적으로 '단순' 바이너리 데이터 정렬기를 사용하는 다음 쿼리 작업에서는 인덱스를 사용할 수 없습니다.
db.myColl.find( { category: "cafe" } )
인덱스 접두사 키가 문자열, 배열 및 내장된 문서가 아닌 복합 인덱스의 경우, 다른 데이터 정렬을 지정하는 작업에서도 인덱스를 사용하여 인덱스 접두사 키에 대한 비교를 지원할 수 있습니다.
예를 들어, 컬렉션 myColl
에는 숫자 필드 score
및 price
와 문자열 필드 category
에 복합 인덱스가 있습니다. 인덱스는 문자열 비교를 위해 데이터 정렬 국가 및 언어 설정 "fr"
을 사용하여 만들어집니다.
db.myColl.createIndex( { score: 1, price: 1, category: 1 }, { collation: { locale: "fr" } } )
문자열 비교에 "simple"
이진 데이터 정렬을 사용하는 다음 작업에서는 인덱스를 사용할 수 있습니다.
db.myColl.find( { score: 5 } ).sort( { price: 1 } ) db.myColl.find( { score: 5, price: { $gt: NumberDecimal( "10" ) } } ).sort( { price: 1 } )
색인이 생성된 category
필드의 문자열 비교를 위해 "simple"
이진 데이터 정렬을 사용하는 다음 작업은 색인을 사용하여 쿼리의 score: 5
부분만 수행할 수 있습니다.
db.myColl.find( { score: 5, category: "cafe" } )
중요
내장된 문서 키를 비롯한 문서 키와의 일치는 단순 이진 비교를 사용합니다. 즉, "foo.bár"와 같은 키에 대한 쿼리는 "foo.bar" 키와 일치하지 않습니다. 이는 강도 매개변수에 설정한 값에 관계없이 적용됩니다.
데이터 정렬에 대한 자세한 내용은 데이터 정렬 참조 페이지를 참조하세요.
다음 인덱스는 단순 바이너리 비교만 지원하며 데이터 정렬은 지원하지 않습니다.
텍스트 인덱스,
2D 인덱스 및
geoHaystack 인덱스.
지원되는 쿼리
쿼리 기준과 쿼리 프로젝션 에 인덱싱된 필드 만 포함되는 경우, MongoDB는 문서를 스캔하거나 문서를 메모리로 가져오지 않고 인덱스에서 직접 결과를 반환합니다. 이러한 포함된 쿼리는 매우 효율적일 수 있습니다.
포함된 쿼리에 대한 자세한 내용은 포함된 쿼리를 참조하세요 .
인덱스 교차
MongoDB는 인덱스의 교차점을 사용하여 쿼리를 처리할 수 있습니다. 복합 쿼리 조건을 지정하는 쿼리의 경우, 한 인덱스가 쿼리 조건의 일부를 충족할 수 있고 다른 인덱스가 쿼리 조건의 다른 부분을 충족할 수 있다면 MongoDB는 두 인덱스의 교집합을 사용하여 쿼리를 수행할 수 있습니다. 복합 인덱스를 사용하는 것과 인덱스 교차를 사용하는 것이 더 효율적인지 여부는 특정 쿼리와 시스템에 따라 다릅니다.
인덱스 교차에 대한 자세한 내용은 인덱스 교차를 참조하세요 .
제한 사항
인덱스 키 길이 또는 collection당 인덱스 수와 같은 특정 제한 사항이 인덱스에 적용됩니다. 자세한 내용은 인덱스 제한 사항 을 참조하세요.
추가 고려 사항
인덱스는 쿼리 성능을 향상시킬 수 있지만 인덱스는 몇 가지 운영 고려 사항도 제공합니다. 자세한 내용 은 인덱스에 대한 운영 고려 사항을 참조하세요.
인덱스를 빌드하는 동안 애플리케이션의 성능이 저하되거나 인덱싱되는 collection에 대한 읽기/쓰기 액세스가 제한될 수 있습니다.
인덱스 빌드 프로세스에 대한 자세한 내용은 채워진 collection 에 대한 인덱스 빌드, 특히 복제된 환경에서 의 인덱스 빌드 섹션을 참조하세요.
일부 드라이버는 1
NumberLong(1)
을(를) 사용하여 인덱스 순서를 지정합니다. 결과 인덱스는 동일합니다.