Computer >> 컴퓨터 >  >> 프로그래밍 >> MongoDB

MongoDB에서 인덱스를 재구축하는 방법 – reIndex() 활용 가이드

MongoDB 인덱스 재구축이란?

MongoDB에서 컬렉션의 기존 인덱스를 다시 생성해야 할 때는 reIndex() 메서드를 사용합니다. 이 메서드는 해당 컬렉션의 모든 인덱스를 삭제한 뒤 처음부터 새로 구축하므로, 인덱스가 손상되었거나 최적화가 필요한 경우에 유용합니다.

먼저 실습을 위해 데모 컬렉션에 인덱스를 하나 생성해 보겠습니다.

1단계: 인덱스 생성하기

다음 쿼리는 StudentFirstName 필드에 오름차순 인덱스를 생성합니다.

> db.demo42.createIndex({"StudentFirstName":1});

위 쿼리를 실행하면 아래와 같은 결과가 출력됩니다.

{
    "createdCollectionAutomatically" : true,
    "numIndexesBefore" : 1,
    "numIndexesAfter" : 2,
    "ok" : 1
}

여기서 createdCollectionAutomatically : true는 컬렉션이 존재하지 않아 자동으로 생성되었음을 의미하며, numIndexesAfter : 2는 기본 _id 인덱스에 새로운 인덱스가 추가되어 총 2개의 인덱스가 되었음을 나타냅니다.

2단계: reIndex()로 인덱스 재구축하기

이제 MongoDB에서 인덱스를 재구축하는 쿼리를 실행해 보겠습니다.

> db.demo42.reIndex({"StudentFirstName":1});

실행 결과는 다음과 같습니다.

{
    "nIndexesWas" : 2,
    "nIndexes" : 2,
    "indexes" : [
        {
            "v" : 2,
            "key" : {
                "_id" : 1
            },
            "name" : "_id_",
            "ns" : "web.demo42"
        },
        {
            "v" : 2,
            "key" : {
                "StudentFirstName" : 1
            },
            "name" : "StudentFirstName_1",
            "ns" : "web.demo42"
        }
    ],
    "ok" : 1
}

결과 분석

출력 결과를 살펴보면 nIndexesWasnIndexes가 모두 2로 표시되어, 재구축 전후로 인덱스 개수에는 변화가 없음을 확인할 수 있습니다. 즉, reIndex()는 인덱스를 추가하거나 삭제하지 않고 기존 인덱스를 그대로 다시 만들어 줍니다.

  • _id_ 인덱스: 모든 컬렉션에 기본으로 존재하는 고유 인덱스입니다.
  • StudentFirstName_1 인덱스: 앞서 생성한 오름차순(1) 인덱스입니다.
  • v : 2: 현재 MongoDB에서 사용하는 인덱스 버전을 의미합니다.
  • ns : web.demo42: 인덱스가 속한 데이터베이스와 컬렉션의 네임스페이스입니다.

주의 사항

reIndex()는 컬렉션 전체를 대상으로 동작하며 대량의 데이터가 있는 경우 상당한 시스템 자원과 시간을 소모할 수 있습니다. 또한 복제 세트(replica set) 환경에서는 권장되지 않으므로, 운영 환경보다는 개발·테스트 환경에서 인덱스 문제를 해결할 때 사용하는 것이 좋습니다.