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 이름으로 인덱스 삭제

+ Recent posts