인덱스 (Indexes)

인덱스 (Indexes)

MongoDB 문서 전체 색인이 필요하면 www.mongodb.com/docs/llms.txt 참고.

인덱스는 MongoDB에서 쿼리를 효율적으로 실행하도록 도와줘요. 인덱스가 없으면 MongoDB는 쿼리 결과를 돌려주기 위해 컬렉션에 있는 모든 문서를 하나씩 훑어야 해요. 그런데 쿼리에 맞는 인덱스가 있으면, MongoDB는 그 인덱스를 이용해서 실제로 스캔해야 하는 문서 수를 크게 줄일 수 있죠.

인덱스가 쿼리 성능을 높여 주긴 하지만, 인덱스를 추가하면 쓰기 작업에는 부정적인 성능 영향이 생겨요. 쓰기 비율이 읽기보다 높은 컬렉션에서는 인덱스가 비용이 커져요. 삽입할 때마다 모든 인덱스도 함께 갱신해야 하거든요.

사용 사례

상황 인덱스 유형
인사 부서에서 직원 ID로 직원을 자주 조회한다고 해요. 직원 ID 필드에 인덱스를 만들면 쿼리 성능을 높일 수 있어요. 단일 필드 인덱스
영업 사원이 지역별로 고객 정보를 자주 조회해요. 지역은 state, city, zipcode 같은 필드를 가진 임베디드 객체에 저장돼 있어요. location 객체에 인덱스를 만들면 그 객체에 대한 쿼리 성능을 높일 수 있어요. 임베디드 문서에 인덱스를 만들면, 임베디드 문서 전체를 지정하는 쿼리만 그 인덱스를 사용해요. 문서 안의 특정 필드에 대한 쿼리는 인덱스를 사용하지 못해요. 임베디드 문서의 단일 필드 인덱스
식료품점 관리자가 재고 부족인 품목을 파악하기 위해 이름과 수량으로 재고 항목을 자주 조회한다고 해요. itemquantity 두 필드에 단일 인덱스를 만들면 쿼리 성능을 높일 수 있어요. 복합 인덱스

시작하기

인덱스는 MongoDB Atlas에서, 드라이버 메서드로, 또는 MongoDB Shell로 만들고 관리할 수 있어요.

MongoDB Atlas에서 인덱스 만들고 관리하기

MongoDB Atlas UI나 Atlas CLI로 인덱스를 만드는 방법은 Create, View, Drop, and Hide Indexes를 참고하세요.

드라이버 메서드 또는 MongoDB Shell로 인덱스 만들고 관리하기

세부 사항

인덱스는 컬렉션 데이터의 일부를 쉽게 탐색할 수 있는 형태로 저장하는 특별한 데이터 구조예요. MongoDB 인덱스는 B-tree 데이터 구조를 사용해요.

인덱스는 특정 필드(또는 필드 집합)의 값을 필드 값 순서대로 저장해요. 인덱스 항목의 순서 덕분에 동등(equality) 매칭과 범위 기반 쿼리 연산을 효율적으로 수행할 수 있어요. 또한 MongoDB는 인덱스 안의 정렬 순서를 이용해 정렬된 결과를 바로 돌려줄 수도 있어요.

제약 사항

인덱스 키 길이 제한과 컬렉션별 인덱스 수 제한은 인덱스 제한을 참고하세요.

기본 인덱스

MongoDB는 컬렉션이 생성될 때 _id 필드에 유니크 인덱스를 만들어요. _id 인덱스는 클라이언트가 _id 필드에 같은 값을 가진 두 문서를 삽입하지 못하게 막아주는 역할을 해요.

샤딩 클러스터에서 _id 필드를 샤드 키로 사용하지 않는다면, 애플리케이션은 _id 필드 값의 유일성을 반드시 보장해야 해요. 자동 생성되는 ObjectId를 사용하는 필드로 이를 해결할 수 있어요.

인덱스 이름

인덱스의 기본 이름은 인덱스된 키들과 각 키의 방향(1 또는 -1)을 밑줄(_)로 이어 붙인 문자열이에요. 예를 들어 { item : 1, quantity: -1 }에 만든 인덱스의 이름은 item_1_quantity_-1이 돼요.

이미 만든 인덱스의 이름은 바꿀 수 없어요. 이름을 바꾸려면 인덱스를 drop하고 새 이름으로 다시 만들어야 해요. 인덱스 이름을 지정하는 방법은 Specify an Index Name을 참고하세요.

인덱스 빌드 성능

인덱스 빌드 과정에 대한 자세한 내용은 Populated Collections에서의 인덱스 빌드를 참고하세요. 여기에는 복제 환경에서의 인덱스 빌드 항목도 포함돼 있어요.

더 알아보기