본문으로 바로가기

인덱스 (2) 인덱스 명령어

category DB, ORM/🍃 mongoDB (shell) 2020. 7. 25. 17:41

 

single index

 

score 필드를 오름차순으로 정렬했다. 사실 단일 인덱스의 경우 오름차순이나 내림차순이나 복잡도는 똑같다.

db.movie.createIndex({score: 1})

 

compound index

 

복합 인덱스의 경우 다음과 같이 생성하면 된다. 복합 인덱스의 특성상 순서가 중요하니 포괄적인 필드는 가급적 앞에 배치할 것.

db.movie.createIndex({score: 1, rating: -1})

 

multikey index

 

reivew 필드의 title 배열을 오름차순으로 멀티키 인덱스를 만듭니다.

db.movie.createIndex({"review.title": 1})

 

text index

 

"text"로 설정하면 텍스트 인덱스가 만들어집니다.

db.movie.createIndex({title: "text"})

 

 

인덱스 생성 옵션

db.movie.createIndex(
  {field1: <1 or -1>, field2: <1 or -1> ...},
  
  // 모든 옵션은 optional. 써도 그만 안 써도 그만
  // 그러나 쿼리 속도를 올리고 싶다면 사용하자. 특히 unique와 sparse는 유용함
  {
    background: <document>,
    unique: <bool>, // true면 field의 값이 고유해야 한다.
    name: <string>, // 인덱스 이름. mongoDB가 알아서 지어주는 이름이 싫다면 직접 지정
    partialFilterExprression: <document> // 
    sparse: <bool>, // 값이 null이면 인덱스를 만들지 않는다.
    expireAfterSeconds: <number> // TTL. 만료되면 인덱스 삭제. 문제는 single index에서만 사용 가능 + 시간값을 가진 필드에서만 사용 가능
  },
)

 

생성 옵션을 활용해보자

 

null인 경우에 인덱스를 생성하지 않고, title 필드의 값은 유니크해야 한다.

db.movie.createIndex(
  {title: 1},

  {
    unique: true, // true면 field의 값이 고유해야 한다. 
    sparse: true, // 값이 null이면 인덱스를 만들지 않는다.
  },
)

 

 

인덱스 조회

// movie 컬렉션에 있는 인덱스 모두 보여줘
db.movie.getIndexed()


// dropIndex로 인덱스 삭제
db.movie.createIndex({title: 1})
db.movie.dropIndex({title: 1})

// 모르겠다 movie 컬렉션에 있는 인덱스 모두 삭제
db.movie.dropIndex()

darren, dev blog
블로그 이미지 DarrenKwonDev 님의 블로그
VISITOR 오늘 / 전체