MongoDB 인덱싱: createIndex() 및 dropIndex()

⚡ 스마트 요약

MongoDB 인덱스는 컬렉션 필드의 정렬된 하위 집합을 저장하여 쿼리가 모든 레코드를 스캔하지 않고도 문서를 찾을 수 있도록 합니다. createIndex, getIndexes 및 dropIndex 메서드는 이러한 성능에 매우 중요한 구조를 생성, 나열 및 제거합니다.

  • 🚀 목적 : 인덱스는 MongoDB 더 빠른 읽기를 위해 전체 컬렉션 스캔을 건너뛰세요.
  • 🛠️ 인덱스 생성: 단일 필드 또는 복합 인덱스를 오름차순 또는 내림차순으로 생성합니다.
  • 🔍 인덱스 가져오기: 컬렉션의 모든 인덱스(기본 _id 포함)를 나열합니다.
  • 🗑️ 드롭인덱스: 인덱스 하나를 제거합니다. dropIndexes는 _id를 제외한 모든 인덱스를 지웁니다.
  • ⚖️ 트레이드오프: 인덱스가 너무 많으면 삽입, 업데이트 및 삭제 속도가 느려집니다.
  • 🤖 AI 튜닝: 도우미가 적절한 색인을 자동으로 추천하고 생성합니다.

MongoDB 인덱싱 createIndex dropIndex

무엇인가 MongoDB 인덱스?

인덱스는 모든 데이터베이스에서 매우 중요하며 MongoDB 마찬가지로 인덱스를 사용하면 쿼리를 더 효율적으로 수행할 수 있습니다. MongoDB 더욱 효율적이 됩니다.

수천 개의 문서로 구성된 컬렉션이 있고 인덱스가 없는 상태에서 특정 문서를 찾기 위해 쿼리를 실행하면 다음과 같은 문제가 발생할 수 있습니다. MongoDB 문서를 찾으려면 전체 컬렉션을 스캔해야 합니다. 하지만 인덱스가 있다면 MongoDB 컬렉션에서 검색해야 하는 문서 수를 제한하기 위해 이러한 인덱스를 사용합니다.

인덱스는 컬렉션 데이터의 일부를 저장하는 특수한 데이터 집합입니다. 데이터가 부분적으로 저장되므로 읽기가 더 쉬워집니다. 이 부분 집합에는 특정 필드 또는 여러 필드의 값이 해당 필드 값 순으로 정렬되어 저장됩니다.

인덱스의 영향 이해

서론에서 인덱스가 쿼리에 유용하다는 것을 보여주었지만, 인덱스가 너무 많으면 삽입, 삭제, 업데이트 작업과 같은 다른 작업의 속도가 느려질 수 있습니다.

문서에 대한 삽입, 삭제 및 업데이트 작업이 빈번하게 수행되는 경우 인덱스도 그만큼 자주 변경되어야 하므로 컬렉션에 부담이 될 뿐입니다.

아래 예시는 컬렉션에서 인덱스를 구성할 수 있는 필드 값의 예를 보여줍니다. 인덱스는 컬렉션의 단일 필드를 기반으로 할 수도 있고, 여러 필드를 기반으로 할 수도 있습니다.

아래 예시에서 직원 ID는 "1"이고 직원은...Code "AA"는 컬렉션 내 문서의 색인을 만드는 데 사용됩니다. 따라서 쿼리 검색이 이루어지면 이러한 색인을 사용하여 컬렉션에서 필요한 문서를 빠르고 효율적으로 찾을 수 있습니다.

따라서 검색 쿼리가 직원을 기반으로 하더라도Code "AA"라고 표시되면 해당 문서는 반송됩니다.

인덱스의 영향 이해

인덱스 생성 방법: createIndex()

인덱스 생성 MongoDB 을 사용하여 수행됩니다 createIndex 방법.

다음 예는 컬렉션에 인덱스를 추가하는 방법을 보여줍니다. "Employeeid"와 "EmployeeName"이라는 필드 이름을 가진 동일한 Employee 컬렉션이 있다고 가정해 보겠습니다.

createIndex를 사용하여 인덱스를 생성합니다.

db.Employee.createIndex({Employeeid:1})

Code 설명 :

  1. The createIndex 메소드는 문서의 "Employeeid"를 기반으로 인덱스를 생성하는 데 사용됩니다.
  2. 매개변수 "1"은 "Employeeid" 필드 값으로 인덱스를 생성할 때 오름차순으로 정렬해야 함을 나타냅니다. 이는 각 문서를 고유하게 식별하는 _id 필드와는 다르다는 점에 유의하십시오. MongoDB 자동으로 생성됩니다. 이제 문서는 _id 필드가 아닌 직원 ID를 기준으로 정렬됩니다.

명령이 성공적으로 실행되면 다음과 같은 출력이 표시됩니다.

출력:

createIndex 출력

  1. numIndexesBefore: 1은 명령이 실행되기 전 인덱스에 있는 필드 값의 개수를 나타냅니다. 각 컬렉션에는 _id 필드가 있으며, 이 필드도 필드 값으로 간주되므로 numIndexesBefore는 1입니다.
  2. numIndexesAfter: 2는 명령 실행 후 인덱스에 있는 필드 값의 개수를 나타냅니다.
  3. "ok: 1" 출력은 작업이 성공적으로 완료되었으며 새 인덱스가 컬렉션에 추가되었음을 나타냅니다.

위 코드는 하나의 필드 값을 기준으로 인덱스를 생성하는 방법을 보여주지만, 여러 필드 값을 기준으로 인덱스를 생성할 수도 있습니다. 다음 예제는 그 방법을 보여줍니다.

여러 필드에 대한 복합 인덱스 생성

db.Employee.createIndex({Employeeid:1, EmployeeName:1})

이제 createIndex 메서드는 여러 필드 값을 고려하므로 "Employeeid"와 "EmployeeName"을 기준으로 인덱스가 생성됩니다. Employeeid:1과 EmployeeName:1은 이 두 필드 값을 기준으로 인덱스를 생성해야 함을 나타내며, :1은 오름차순 정렬을 의미합니다. 이를 복합 인덱스라고 합니다.

인덱스 찾는 방법: getIndexes()

인덱스 찾기 MongoDB 을 사용하여 수행됩니다 인덱스 가져오기 이 방법은 다음과 같습니다. 다음 예시는 이 방법을 보여줍니다.

getIndexes를 사용하여 인덱스를 찾으세요.

db.Employee.getIndexes()

getIndexes 메소드는 컬렉션의 모든 인덱스를 찾는 데 사용됩니다.

명령이 성공적으로 실행되면 다음과 같은 출력이 표시됩니다.

출력:

getIndexes 출력

출력 결과는 컬렉션에 _id 필드와 Employeeid 필드라는 두 개의 인덱스가 있음을 보여주는 문서를 반환합니다. :1은 인덱스의 필드 값이 오름차순으로 생성됨을 나타냅니다.

인덱스 삭제 방법: dropIndex()

인덱스를 제거하는 중 MongoDB 을 사용하여 수행됩니다 드롭인덱스 이 방법은 다음과 같습니다. 다음 예시는 이 방법을 보여줍니다.

dropIndex를 사용하여 인덱스를 삭제합니다.

db.Employee.dropIndex({Employeeid:1})

dropIndex 메서드는 인덱스에서 제거해야 할 필수 필드 값을 인수로 받습니다.

명령이 성공적으로 실행되면 다음과 같은 출력이 표시됩니다.

출력:

드롭인덱스 출력

  1. nIndexesWas: 3은 명령 실행 전 인덱스에 있던 필드 값의 개수를 나타냅니다. 각 컬렉션에는 _id 필드가 있으며, 이 필드도 필드 값으로 간주됩니다.
  2. ok: 1 출력은 작업이 성공적이었으며 인덱스에서 "Employeeid" 필드가 제거되었음을 나타냅니다.

컬렉션에서 모든 인덱스를 한 번에 제거하려면 dropIndexes 명령을 사용할 수 있습니다. 다음 예는 이 작업을 수행하는 방법을 보여줍니다.

dropIndexes 명령어를 사용하여 모든 인덱스를 삭제합니다.

db.Employee.dropIndexes()

dropIndexes 메소드는 _id 인덱스를 제외한 모든 인덱스를 삭제합니다.

명령이 성공적으로 실행되면 다음과 같은 출력이 표시됩니다.

출력:

드롭인덱스 출력

  1. nIndexesWas: 2는 명령이 실행되기 전 인덱스에 있던 필드 값의 개수를 나타냅니다.
  2. 각 컬렉션에는 _id 필드가 있으며, 이 필드는 필드 값으로 간주되어 제거되지 않습니다. MongoDB이 메시지가 나타내는 바는 바로 그것입니다.
  3. ok: 1 출력은 작업이 성공적이었음을 나타냅니다.

자주 묻는 질문

단일 필드 인덱스는 하나의 필드를 정렬하며 해당 필드만을 기준으로 필터링하는 쿼리에 적합합니다. 복합 인덱스는 여러 필드를 하나의 구조로 포함하며 이러한 필드를 함께 필터링하거나 정렬하는 쿼리에 적합합니다. 복합 인덱스는 최대 32개의 필드를 지원합니다.

_id 필드는 다음과 같습니다. MongoDB_id는 기본 키이므로 모든 컬렉션에 고유한 _id 인덱스가 자동으로 생성됩니다. 이 인덱스는 삭제할 수 없습니다. 따라서 사용자 지정 인덱스를 추가하기 전에도 numIndexesBefore는 1부터 시작합니다.

쿼리를 실행할 때 `.explain(“executionStats”)`를 함께 사용하세요. 최적의 실행 계획에서 IXSCAN 단계는 인덱스가 사용되었음을 의미하고, COLLSCAN은 인덱스가 사용되었음을 의미합니다. MongoDB 모든 문서를 스캔하고 새로운 색인을 만들면 도움이 될 수 있습니다.

`$indexStats` 집계 단계를 사용하여 각 인덱스가 얼마나 자주 액세스되는지 확인할 수 있습니다. 사용량이 매우 낮은 인덱스는 디스크 공간을 낭비하고 쓰기 속도를 저하시키므로, `dropIndex`를 사용하여 제거함으로써 컬렉션을 효율적으로 유지하세요.

AI 도구는 느린 쿼리 로그를 분석하여 인덱싱할 필드를 제안합니다. MongoDB's Performance Advisor는 영향력을 기준으로 지수 추천 순위를 매깁니다.ping 가치가 높은 인덱스를 추가하고 중복되는 인덱스는 건너뜁니다.

예. AI Copilot 어시스턴트는 일반 영어 요청을 오름차순 또는 내림차순 키 및 복합 필드 순서를 포함한 올바른 createIndex 구문으로 변환한 다음 결과 인덱스를 설명합니다.

ESR은 Equality(동일성), Sort(정렬), Range(범위)의 약자입니다. 복합 인덱스를 구축할 때는 동일성 일치 필드를 먼저 배치하고, 그 다음 정렬 필드, 마지막으로 범위 필터를 배치합니다. 이러한 순서를 사용하면 다음과 같은 이점을 얻을 수 있습니다. MongoDB 인덱스를 가장 효율적으로 사용하세요.

커버드 쿼리는 문서를 읽지 않고 인덱스에서만 답변을 얻습니다. 필터와 프로젝션의 모든 필드가 하나의 인덱스에 있는 경우, MongoDB 더 빠른 결과를 보여줍니다.

이 게시물을 요약하면 다음과 같습니다.