
몽고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 또는 -1로 설정되어 있죠. 잘 모르는 경우 getIndexes()를 사용하여 확인 후 정확한 키를 입력하세요.
예를들어 설정된 키가 { siteName: -1 } 인 경우라면 삭제할 경우 아래와 같죠.
db.collection.dropIndex({ siteName: -1 })
설정된 인덱스 siteName이 삭제되었습니다.
db.collection.getIndexes() 명령어로 잘 삭제되었는지 확인해보세요.
! 설정된 모든 인덱스 삭제하기
다음으로 모든 index를 삭제하는 방법입니다. 이때는
dropIndexes() 명령어를 사용하면 됩니다.
db.collection.dropIndexes()
이 명령어는 모든 인덱스를 삭제하기 때문에 주의가 필요합니다~
한 가지 방법이 더 있습니다. 바로 reIndex()를 사용하는 방법입니다. reIndex()는 설정된 index를 재설정 할 수 있는 방법이죠.
db.collection.reIndex()
참고로 reIndex() 방법은 사용에 주의가 필요합니다. 꼭 필요한 경우에 사용하고 특히
샤딩 및 레플리카 설정시 더욱 주의해 사용해야합니다.
# 마치면서
여기까지 MongoDB의 인덱스 설정 방법을 알아보았습니다. 인덱스 설정 여부에 따라 검색에 따른 성능 차이가 현저히 차이나게 됩니다. 간단한 조회라도 자주 사용되는 필드에 대하여 인덱스 설정이 꼭 필요하므로 알아두어야합니다.