MongoDB - indexes 사용법
쿼리 속도를 향상시키기 위해 인덱스를 사용한다. 인덱스는 find, update, delete 속도를 향상시킬 수 있다.
인덱스가 없을 경우 원하는 데이터를 찾기 위해서 Document 전체 데이터를 탐색해야 한다.
인덱스 유형
-
인덱스 사용 및 최적화
Explain
Explain 명령은 다음 명령 실행에 대한 정보를 제공합니다.
: aggregate, count, distinct, find, findAndModify, delete, mapReduce, and update.
사용예시)
db.contacts.explain().find(find({"dob.age": {$gt : 60}})
db.contacts.explain("executionStats").find({"dob.age": {$gt : 60}})
참고자료
https://www.mongodb.com/docs/manual/reference/command/explain/
Create Index
db.contacts.createIndex({dob.age: 1}, { name: "<indexName>" } )
--> -1 인 경우 descending 인덱스 , 1 이면 ascending 인덱스
Create Compound Index
db.contacts.createIndex({dob.age: 1, gender: 1}, { name: "<indexName>" } )
Create Unique Index
db.contacts.createIndex({email: 1}, {inique: true}, { name: "<indexName>" } )
Using Index for Sorting
Partial Filters
Partial Index를 만들기 위해서는
db.collection.createIndex()메소드를 사용한 후, partialFilterExpression을 옵션을 사용한다.
이 경우 partialFilterExpression에 해당하는 데이터를 조회할 경우에만 인덱스를 사용한다.
partialFilterExpression 를 사용하는 이유는 인덱스 크기가 현저히 작아진다.
db.contacts.createIndex({dob.age: 1}, {partialFilterExpression: {"gender": "male"}}, { name: "<indexName>" } )
db.contacts.find({"dob.age": {$gt: 60}, gender: "male"}) 이렇게 사용해야 위에서 생성한 인덱스를 사용한다.
TTL(Time-To-Live) Index
db.sessions.createIndex({createdAt: 1}, {expireAfterSeconds: 10})
10초 후에 인덱스 및 데이터를 삭제한다. 일반 RDBMS에서 제공하는 temporary table 처럼 사용할 수 있다.
Drop Index
db.document.dropIndex(<index_name>) 또는 db.document.dropIndex(<field: 1>)
- db.pets.dropIndex( "catIdx" ) : 인덱스 이름으로 인덱스 삭제
- db.pets.dropIndex( { "cat" : -1 } ) : fiedl 이름으로 인덱스 삭제