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

무엇인가 MongoDB 인덱스?
인덱스는 모든 데이터베이스에서 매우 중요하며 MongoDB 마찬가지로 인덱스를 사용하면 쿼리를 더 효율적으로 수행할 수 있습니다. MongoDB 더욱 효율적이 됩니다.
수천 개의 문서로 구성된 컬렉션이 있고 인덱스가 없는 상태에서 특정 문서를 찾기 위해 쿼리를 실행하면 다음과 같은 문제가 발생할 수 있습니다. MongoDB 문서를 찾으려면 전체 컬렉션을 스캔해야 합니다. 하지만 인덱스가 있다면 MongoDB 컬렉션에서 검색해야 하는 문서 수를 제한하기 위해 이러한 인덱스를 사용합니다.
인덱스는 컬렉션 데이터의 일부를 저장하는 특수한 데이터 집합입니다. 데이터가 부분적으로 저장되므로 읽기가 더 쉬워집니다. 이 부분 집합에는 특정 필드 또는 여러 필드의 값이 해당 필드 값 순으로 정렬되어 저장됩니다.
인덱스의 영향 이해
서론에서 인덱스가 쿼리에 유용하다는 것을 보여주었지만, 인덱스가 너무 많으면 삽입, 삭제, 업데이트 작업과 같은 다른 작업의 속도가 느려질 수 있습니다.
문서에 대한 삽입, 삭제 및 업데이트 작업이 빈번하게 수행되는 경우 인덱스도 그만큼 자주 변경되어야 하므로 컬렉션에 부담이 될 뿐입니다.
아래 예시는 컬렉션에서 인덱스를 구성할 수 있는 필드 값의 예를 보여줍니다. 인덱스는 컬렉션의 단일 필드를 기반으로 할 수도 있고, 여러 필드를 기반으로 할 수도 있습니다.
아래 예시에서 직원 ID는 "1"이고 직원은...Code "AA"는 컬렉션 내 문서의 색인을 만드는 데 사용됩니다. 따라서 쿼리 검색이 이루어지면 이러한 색인을 사용하여 컬렉션에서 필요한 문서를 빠르고 효율적으로 찾을 수 있습니다.
따라서 검색 쿼리가 직원을 기반으로 하더라도Code "AA"라고 표시되면 해당 문서는 반송됩니다.
인덱스 생성 방법: createIndex()
인덱스 생성 MongoDB 을 사용하여 수행됩니다 createIndex 방법.
다음 예는 컬렉션에 인덱스를 추가하는 방법을 보여줍니다. "Employeeid"와 "EmployeeName"이라는 필드 이름을 가진 동일한 Employee 컬렉션이 있다고 가정해 보겠습니다.
db.Employee.createIndex({Employeeid:1})
Code 설명 :
- The createIndex 메소드는 문서의 "Employeeid"를 기반으로 인덱스를 생성하는 데 사용됩니다.
- 매개변수 "1"은 "Employeeid" 필드 값으로 인덱스를 생성할 때 오름차순으로 정렬해야 함을 나타냅니다. 이는 각 문서를 고유하게 식별하는 _id 필드와는 다르다는 점에 유의하십시오. MongoDB 자동으로 생성됩니다. 이제 문서는 _id 필드가 아닌 직원 ID를 기준으로 정렬됩니다.
명령이 성공적으로 실행되면 다음과 같은 출력이 표시됩니다.
출력:
- numIndexesBefore: 1은 명령이 실행되기 전 인덱스에 있는 필드 값의 개수를 나타냅니다. 각 컬렉션에는 _id 필드가 있으며, 이 필드도 필드 값으로 간주되므로 numIndexesBefore는 1입니다.
- numIndexesAfter: 2는 명령 실행 후 인덱스에 있는 필드 값의 개수를 나타냅니다.
- "ok: 1" 출력은 작업이 성공적으로 완료되었으며 새 인덱스가 컬렉션에 추가되었음을 나타냅니다.
위 코드는 하나의 필드 값을 기준으로 인덱스를 생성하는 방법을 보여주지만, 여러 필드 값을 기준으로 인덱스를 생성할 수도 있습니다. 다음 예제는 그 방법을 보여줍니다.
db.Employee.createIndex({Employeeid:1, EmployeeName:1})
이제 createIndex 메서드는 여러 필드 값을 고려하므로 "Employeeid"와 "EmployeeName"을 기준으로 인덱스가 생성됩니다. Employeeid:1과 EmployeeName:1은 이 두 필드 값을 기준으로 인덱스를 생성해야 함을 나타내며, :1은 오름차순 정렬을 의미합니다. 이를 복합 인덱스라고 합니다.
인덱스 찾는 방법: getIndexes()
인덱스 찾기 MongoDB 을 사용하여 수행됩니다 인덱스 가져오기 이 방법은 다음과 같습니다. 다음 예시는 이 방법을 보여줍니다.
db.Employee.getIndexes()
getIndexes 메소드는 컬렉션의 모든 인덱스를 찾는 데 사용됩니다.
명령이 성공적으로 실행되면 다음과 같은 출력이 표시됩니다.
출력:
출력 결과는 컬렉션에 _id 필드와 Employeeid 필드라는 두 개의 인덱스가 있음을 보여주는 문서를 반환합니다. :1은 인덱스의 필드 값이 오름차순으로 생성됨을 나타냅니다.
인덱스 삭제 방법: dropIndex()
인덱스를 제거하는 중 MongoDB 을 사용하여 수행됩니다 드롭인덱스 이 방법은 다음과 같습니다. 다음 예시는 이 방법을 보여줍니다.
db.Employee.dropIndex({Employeeid:1})
dropIndex 메서드는 인덱스에서 제거해야 할 필수 필드 값을 인수로 받습니다.
명령이 성공적으로 실행되면 다음과 같은 출력이 표시됩니다.
출력:
- nIndexesWas: 3은 명령 실행 전 인덱스에 있던 필드 값의 개수를 나타냅니다. 각 컬렉션에는 _id 필드가 있으며, 이 필드도 필드 값으로 간주됩니다.
- ok: 1 출력은 작업이 성공적이었으며 인덱스에서 "Employeeid" 필드가 제거되었음을 나타냅니다.
컬렉션에서 모든 인덱스를 한 번에 제거하려면 dropIndexes 명령을 사용할 수 있습니다. 다음 예는 이 작업을 수행하는 방법을 보여줍니다.
db.Employee.dropIndexes()
dropIndexes 메소드는 _id 인덱스를 제외한 모든 인덱스를 삭제합니다.
명령이 성공적으로 실행되면 다음과 같은 출력이 표시됩니다.
출력:
- nIndexesWas: 2는 명령이 실행되기 전 인덱스에 있던 필드 값의 개수를 나타냅니다.
- 각 컬렉션에는 _id 필드가 있으며, 이 필드는 필드 값으로 간주되어 제거되지 않습니다. MongoDB이 메시지가 나타내는 바는 바로 그것입니다.
- ok: 1 출력은 작업이 성공적이었음을 나타냅니다.










