MongoDB 적용 인덱스 쿼리
공식 MongoDB 문서에 따르면 적용 범위 쿼리는 다음 쿼리입니다.
모든 쿼리 필드는 인덱스의 일부입니다.
쿼리에서 반환된 모든 필드는 동일한 인덱스에 있습니다.
쿼리에 나타나는 모든 필드는 인덱스의 일부이므로, MongoDB를 사용하면 일치하는 쿼리 조건을 찾기 위해 전체 데이터 문서를 검색하고 동일한 인덱스를 사용하여 쿼리 결과를 반환할 필요가 없습니다.
인덱스는 RAM에 상주하기 때문에 문서를 스캔하여 데이터를 읽는 것보다 인덱스에서 데이터를 가져오는 것이 훨씬 빠릅니다.
커버링 인덱스 쿼리 사용
커버링 인덱스 쿼리를 테스트하려면 다음 사용자 컬렉션을 사용합니다.
{ "_id": ObjectId("53402597d852426020000002"), "contact": "987654321", "dob": "01-01-1991", "gender": "M", "name": "Tom Benzamin", "user_name": "tombenzamin" }
다음을 사용하여 사용자 컬렉션에 공동 인덱스를 생성합니다. 필드 성별 및 user_name :
>db.users.ensureIndex({gender:1,user_name:1})
이제 인덱스는 다음 쿼리를 포함합니다:
>db.users.find({gender:"M"},{user_name:1,_id:0})
즉, 위 쿼리의 경우 MongoDB는 데이터베이스 파일을 찾지 않습니다. 대신 매우 빠른 데이터 쿼리인 인덱스에서 데이터를 가져옵니다.
우리 인덱스에는 _id 필드가 포함되어 있지 않으므로 쿼리에서는 기본적으로 _id가 반환되며 MongoDB 쿼리 결과 집합에서 제외할 수 있습니다.
다음 예는 _id를 제외하지 않아 쿼리가 다루어지지 않습니다:
>db.users.find({gender:"M"},{user_name:1})
마지막으로 다음 쿼리라면 포함 인덱스 쿼리를 사용할 수 없습니다:
모든 인덱스 필드는 배열입니다
모든 인덱스 필드는 하위 문서입니다