인덱스는 DB의 검색을 빠르게 하기 위해 데이터의 순서를 미리 정리해 두는 과정입니다. 원하는 데이터 필드를 인덱스로 지정하여 검색 결과를 빠르게 하는 것이 가능합니다.
db.users.createIndes({ <field>: 1}) // 값이 1이면 오름차순, -1이면 내림차수누 정렬
db.users.createIndex({ age: 1, scrore: -1}) // age를 오름차순으로 정렬한 상태에서 score는 내림차순으로 정렬합니다.
createIndex() 메소드에 두 번쨰 인자는 속성입니다. 이 속성에는 4가지가 있습니다.
_id 필드처럼 컬렉션에 단 한개의 값만 존재할 수 있는 속성
db.users.createIndex({<field>: 1, {unique:true}})
document의 조건을 정하여 일부 document에만 인덱스를 적용 할 때 사용됩니다. partial 속성을 사용하면, 필요한 부분에만 인덱싱을 사용해 저장공간을 아끼고 속도를 높일 수 있습니다.
db.users.createIndex({<field>: 1}, {partialFilterExpression: {visitors: {$gt: 100}}})
Date 타입 혹은 Date 배열 타입의 필드에 적용 할 수 있는 속성입니다. 이 속성을 사용하여 document를 expire시킬 수 있습니다.
즉 추가하고 특정시간이 지나면, document를 컬렉션에서 제거합니다.
db.users.createIndex({<field>: 1}, {expireAfterSeconds: 3600}) //현재 시각과 1시간 이상 차이나면 제거
db.users.getIndexes()
db.users.dropIndex({<field>: 1})
인덱스의 종류에는 단일 필드 인덱스, 복합 인덱스, 다중 키 인덱스, geospatial 인덱스, test 인덱스, 해쉬 인덱스가 존재합니다.
하나의 필드 인덱스를 사용하는 것을 단일 필드 인덱스라고 합니다. MongoDB에서는 기본적으로 컬렉션에 _id 라는 단일 필드 인덱션이 생성됩니다.
두 개 이상의 필드를 사용하는 인덱스를 복합 인덱스라고 부릅니다.
복합인덱스를 사용할 때는 아래와 같은 특징을 고려해야합니다.
필드 타입이 배열인 필드에 인덱스를 적용할 때에 사용됩니다. 이 인덱스를 통하여 배열에 특정값이 포함되어있는 document를 효율적으로 스캔합니다.
지도의 좌표와 같은 데이터를 효율적으로 쿼리하기 위해서 사용되는 인덱스
B Tress가 아닌 Hash 자료구조를 사용함