본문 바로가기
NoSQL

MongoDB - Indexing

by Mi.Ro 2023. 8. 7.

Indexing

  • Index : query를 효율적으로 하게 해줌
  • Index가 없을 때, query시 collection을 full scan해서 시간이 오래 걸림
  • 수행 시간 확인 : db.c.find().explain('executionStats')

Index 만들기

  • createIndex() : index를 만듬.
  • primary key인 _id field의 index는 기본으로 설정되어 있음

      > db.c.createIndex({A : 1}) -> A라는 필드에 오름차순으로 인덱스 생성(-1은 내림차순)

      > db.c.getIndexes() -> 어떤 인덱스를 쓰고 있는지 보여줌

      > db.c.dropIndex({A : 1})) -> 해당 인덱스 제거

      > db.c.dropIndexes() -> 모든 인덱스 제거

  • Index 선택하기
    • index는 storage용량을 차지하고 만들때 시간이 오래 걸림.
    • MongoDB는 collection을 바꿀때마다 index를 update하기도 함.
  • Compoud Index 
    • 2개 이상의 field로 index를 만듬
    • multiple fields로 search시 유용함

             > db.c.createIndex({age:1, name:-1}) -> age로 오름차순, name으로 내림차순으로 compound index 생성

  • Embedded Document indexing
    • embedded document에 대해서도 index 생성 가능

              > db.c.createIndex({'name.first':1})

  • Array indexing
    • array에 대해서도 index 생성 가능
  • Unique indexes
    • index에 단 하나의 값만 존재
    • index 생성 후 key에 새로운 값을 insert시 error 발생
    • 중복값이 있을 때, unique index 생성 안됨

              > db.c.createIndex({name:1}, {unique:true})

  • Sparse indexes
    • document내에 key가 있는 문서만 index로 찾음
    • key에 없는 문서를 찾을때 index를 안씀 : hint() method로 강제로 index를 쓰게 함

              > db.c.createIndex({name:1}, {unique:true, sparse:true})

  • Partial indexes
    • 어떤 조건에 맞는 문서만 index함

              > db.c.createIndex({name:1}, {partialFilterExpression : {age:{$gte 10}}})

  • Hashed indexes
    • MongoDB에서 B-tree index 외에 hashed index도 제공
    • multi-key index 지원 안됨
    • compound index, unique 안됨

              > db.c.createIndex({id:'hashed'})

'NoSQL' 카테고리의 다른 글

MongoDB - text search  (0) 2023.08.08
MongoDB - Geospatial data  (0) 2023.08.08
MongoDB - Querying  (0) 2023.08.07
MongoDB - Crud operations  (0) 2023.08.07
MongoDB 기본 및 시작하기  (0) 2023.08.06