mongoDB index 설정

개발새발·2023년 1월 1일
0

db

목록 보기
8/10

몽고디비를 사용하면서 MySQL 랑 그냥 똑같겠지 라는 생각을 했다. 사실 MySQL 보다는 Elasticsearch 와 가까워서 index와 shard 를 설정하는데 더 용이하더라..! shard 는 아직 사용해보지 않았고, index만 사용해봐서 그 내용을 정리해보고자 한다.

💜 인덱스란?

자주 조회는 필드를 지정하여 조회나 정렬하는데 속도를 빠르게 하는 방법을 말한다. 하지만 인덱스 자체가 용량을 차지하고 있기 때문에 이점을 주의해서 설정해줘야한다.

🧙 인덱스 설정

예를 들어, 아래와 같은 DDL 이 있다고 한다. 아래와 같은 몽고디비 데이터가 존재한다고 생각해보자.

table명: "example"
{ "_id" : ObjectId("asd234324asdfasda434"), "name" : "popo", "tag" : { name : "hihi", values: "asdf"}, "lang" : "EN" }

여기서, name 필드로 조회를 하겠다고 한다면 name 을 아래처럼 인덱스 설정해주면 된다. 아, 여기서 _id 는 기본으로 인덱스 설정이 되어있다.

아래 나와있는 숫자는 오름차순으로 조회할건지, 내림차순으로 조회할건지에 대한 설정값이다. 1 은 오름차순, -1 은 내림차순을 의미한다.

db.example.createIndex({ name: 1 });

또, 필드 내부의 object 가 있을 수도 있는데, 이것을 이용해서도 인덱스 세팅이 가능하다.

db.example.createIndex({ "tag.name" : 1 })

그리고 복합 필드로도 가능하다. 이를 복합 인덱스라고 하는데, 세팅은 아래처럼 하면 된다.
복합 인덱스는 순서가 중요하다. 예를 들어, a,b,c 필드 순서로 복합 필드를 만들었다면 a / a,b 이렇게 인덱스가 같이 생성된다. 따라서 a를 조회하거나 a,b를 조회하면 이때 인덱스는 사용가능하나 b만 조회하거나 b,c를 조회할때나 c를 조회할때는 인덱스를 사용하지 못한다.

db.example.createIndex({ name : 1, lang : -1 })

🥳 인덱스 제거

db.example.dropIndex(필드명)
profile
발새발개

0개의 댓글