몽고DB를 비롯하여 NoSQL 역시 다른 Database, RDBMS처럼 인덱스 설정이 필요합니다. 그렇지 않으면 Slow Query 등 검색, 소팅 단계에서 성능에 큰 차이가 발생할 수 있습니다. 아래는 MongoDB에 인덱스를 설정하는 방법과 조회, 추가 및 관련 예제를 자세히 알아봅니다.



# MongoDB 인덱스 조회 및 확인하기가장 먼저 설정된 인덱스를 조회하기 위한 방법입니다. 현재 설정된 MongoDB의 인덱스를 확인하기 위해서는 getIndexes()를 사용합니다.
> db.collection.getIndexes()

명령어를 실행하면 아래와 같이 나타납니다.
[
  {
    'v': 1,
    'key': {
      '_id': 1
     },
     'name': '_id',
     'ns': 'collection'
  }
]

보시면 _id로 인덱스 설정이 되어 있는 것을 볼 수 있습니다. 이처럼 getIndexed()는 설정된 인덱스를 보여줍니다. 다음으로 인덱스를 추가하는 방법입니다.


! 인덱스 추가하기, createIndex()
가장 기본적인 명령어로 원하는 인덱스를 추가하는 방법입니다.원하는 필드명을 사용하여 인덱스를 설정, 추가할 수 있습니다. 인덱스를 설정, 추가하는 방법은 아래와 같이 문법을 적용합니다.


db.collection.createIndex(keys, options)


키에는 필드명과 함께 오름 또는 내림차순에 따라서 1 또는 -1을 함께 설정합니다.


@ name 필드의 예
만약 name 필드에 대하여 인덱스를 설정하려면?
db.collection.createIndex({ name: 1 })

필드명과 값으로 1 또는 -1을 사용하면 index가 설정됩니다. 오름차순, 내림차순을 결정할 수 있습니다. 위 명령어를 수행하면 아래와 같이 출력됩니다.

{
  "createdCollectionAutomaticallly": false,
  "numIndexsBefore": 2, // 인덱스 설정 직 전에 설정된 인덱스 수
  "numIndexsAfter": 3 //  인덱스 설정 이 후 설정된 인덱스 수
  "ok": 1 // 인덱스 설정 결과
}

인덱스가 정상 설정되면 ok: 1의 결과를 출력합니다. 함께 출력되는 내용은 인덱스 설정 이 전~ 그리고 설정 이 후의 인덱스 개수를 확인 할 수 있습니다. 기존에는 2개에서 새로 설정되어 3개가 되었음을 나타냅니다.


@ 두 개 이상의 필드에 인덱스 설정하기, 복합(Compound) 인덱스
인덱스 설정은 하나가 아닌 동시에 두 개 이상의 필드에 인덱스 설정하는 것도 가능합니다. 방법에 따라 Compound 방식과 Multikey 방식이 존재하며 아래는 Compound 인덱스 방법입니다. 인덱스 설정은 조회 순위에 따라 필드 순서를 앞에 위치하도록 합니다.
db.collection.createIndex({ name: 1, site: -1 })

name과 site 필드를 인덱스를 선언하되 첫번째 인덱스로 name을 오름차순, 두 번째 인덱스로 site를 내림차순으로 설정한 경우입니다. 서로 다른 차순으로 설정하는 경우 복합(Compound) 인덱스를 사용합니다.



# 인덱스 삭제하기, dropIndex(), reIndex()
설정된 MongoDB의 index를 삭제 및 재설정하는 방법입니다. 두 가지 방법으로 설정된 키를 삭제하는 방법전체 모든 인덱스를 삭제하고 재설정하는 방법이 있습니다.


! 설정된 키 값 기준 인덱스 삭제하기
먼저 아래 방법은 설정된 인덱스를 삭제하는 방법입니다. 아래처럼 dropIndex()를 사용합니다.
db.collection.dropIndex({ fieldName: -1 })

삭제할 인덱스의 필드 명과 값으로 -1을 입력하도록 합니다. 예를들어 siteName이라는 필드명을 지우려면 아래와 같죠.
db.collection.dropIndex({ siteName: -1 })

설정된 인덱스 siteName이 삭제되었습니다. db.collection.getIndexes() 명령어로 잘 삭제되었는지 확인해보세요.


! 설정된 모든 인덱스 삭제하기
다음으로 모든 index를 삭제하는 방법입니다. 이때는 dropIndexes() 명령어를 사용하면 됩니다.
db.collection.dropIndexes()

이 명령어는 모든 인덱스를 삭제하기 때문에 주의가 필요합니다~

한 가지 방법이 더 있습니다. 바로 reIndex()를 사용하는 방법입니다. reIndex()는 설정된 index를 재설정 할 수 있는 방법이죠.
db.collection.reIndex()

참고로 reIndex() 방법은 사용에 주의가 필요합니다. 꼭 필요한 경우에 사용하고 특히 샤딩 및 레플리카 설정시 더욱 주의해 사용해야합니다.



# 마치면서
여기까지 MongoDB의 인덱스 설정 방법을 알아보았습니다. 인덱스 설정 여부에 따라 검색에 따른 성능 차이가 현저히 차이나게 됩니다. 간단한 조회라도 자주 사용되는 필드에 대하여 인덱스 설정이 꼭 필요하므로 알아두어야합니다.