MongoDB의 Index에 관하여...(1)

YB·2024년 1월 26일

DB 공부

목록 보기
4/6

MongoDB index

인덱스는 DB의 검색을 빠르게 하기 위하여 데이터의 순서를 미리 정리해 두는 과정


MongoDB index에 대한 개념

  • index는 한 쿼리에 한 index만 유효 → 두 개의 index 가 필요하다면 복합 index 하나를 사용.
  • index는 어떤 데이터가 도큐먼트에 추가되거나 수정될 때(write 작업) 그 컬렉션에 생성되어 있는 index도 새로운 도큐먼트를 포함시켜 수정됨
    • index 추가 시 wirte 작업은 느려질 수 있음
    • 따라서 index는 read 작업 위주의 애플리케션에서 유용
    • 읽기보다 쓰기 작업이 많으면 index를 추가하는 것이 효율적이지 않을 수 있음

MongoDB에서 Index의 종류

  • 단일 필드 인덱스

  • 복합 인덱스

  • 다중 키 인덱스

  • geospatial 인덱스

  • test 인덱스

  • 해쉬 인덱스


단일 필드 인덱스: 하나의 필드를 사용하는 인덱스

  • MongoDB는 기본적으로 컬렉션에 _id라는 단일 필드 인덱스가 생성됨

복합 인덱스: 두 개 이상의 필드를 사용하는 인덱스

  • 아래처럼 지정하면 userid 오름차순, score 내림차순으로 정렬되어 저장됨

  • 복합 인덱스에서는 키의 순서가 매우 중요

    • a-b와 b-a는 다른 인덱스
    • 인덱스의 정렬 방향도 중요
      • 생성된 인덱스: { 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)

profile
뭐라도 만들어본다

0개의 댓글