인덱스는 DB의 검색을 빠르게 하기 위하여 데이터의 순서를 미리 정리해 두는 과정
단일 필드 인덱스
복합 인덱스
다중 키 인덱스
geospatial 인덱스
test 인덱스
해쉬 인덱스
아래처럼 지정하면 userid 오름차순, score 내림차순으로 정렬되어 저장됨

복합 인덱스에서는 키의 순서가 매우 중요
- 생성된 인덱스: { a: 1, b: -1 }
- 지원하는 조회 쿼리: { a: 1, b: -1 }
- 지원하는 조회 쿼리: { a: -1, b: 1 }
- 지원하지 않는 조회 쿼리: { b: 1, a: 1 }
- 지원하지 않는 조회 쿼리: { b: -1, a: -1 }
Index Prefix: { a: 1, b: -1, c: 1 }을 정의했다면, { a: 1 }, { a: 1, b: -1 }을 따로 정의할 필요가 없음 ( = { a: 1 }, { a: 1, b: -1 }, { a: 1, b: -1, c: 1 }이 이 인덱스의 prefix 임)
sort 명령을 사용할 때도 이미 인덱스가 걸려있다면 활용될 수 있음
인덱스: { a: 1, b: 1, c: 1, d: 1 }
활용 가능
db.data.find( { a: 5 } ).sort( { b: 1, c: 1 } )
db.data.find( { b: 3, a: 4 } ).sort( { c: 1 } )
db.data.find( { a: 5, b: { $lt: 3} } ).sort( { b: 1 } )
활용 불가
db.data.find( { a: { $gt: 2 } } ).sort( { c: 1 } )
Index들이 여러개 정의 되있는 경우 알아서 쿼리에 적용 됨
참고:
https://ryu-e.tistory.com/1 (MongoDB index 개념과 indexing 전략)
https://www.mongodb.com/docs/manual/core/indexes/index-types/index-compound/ (Compound Indexes)
https://www.mongodb.com/docs/manual/tutorial/sort-results-with-indexes/ (Use Indexes to Sort Query Results)