Docs Menu
Docs Home
/
MongoDB Ops Manager
/ /

불필요한 인덱스 제거

이 페이지의 내용

  • 개요
  • 예시
  • 불필요한 인덱스 식별 및 제거
  • 자세히 알아보기

인덱스는 MongoDB에서 쿼리를 효율적으로 실행할 수 있도록 지원합니다. 그러나 생성하는 각 인덱스는 쓰기에 부정적인 성능 영향을 미치며 약간의 디스크 공간이 필요합니다.

불필요한 인덱스를 만들면 컬렉션이 비대해지고 쓰기 속도가 느려집니다. 애플리케이션이 수행하는 각 쿼리와 인덱스의 정당성 여부를 고려하세요. 필드가 데이터베이스 쿼리에 사용되지 않거나 인덱스가 중복되어 사용하지 않는 인덱스를 제거합니다.

불필요한 인덱스를 식별하여 삭제해야 합니다. 데이터 탐색기 를 사용하여 MongoDB Ops Manager 에서 인덱스를 관리 합니다.

플레이어에게 coins을 지급하는 게임을 가정해 보겠습니다. 플레이어의 coins이 20에 도달하면 해당 플레이어는 star 1개를 획득하고 coins은 0으로 초기화됩니다. 게임에는 다음과 같은 문서가 들어 있는 players 컬렉션이 있습니다.

// players collection
{
"_id": "ObjectId(123)",
"first_name": "John",
"last_name": "Doe",
"coins": 11,
"stars": 2
}

players 컬렉션에는 모든 필드에 대한 인덱스이 있습니다.

  • _id 기본적으로 인덱싱됩니다.

  • { last_name: 1 }

  • { last_name: 1, first_name: 1 }

  • { coins: -1 }

  • { stars: -1 }

이 예제에서 게임은 데이터베이스에 플레이어 정보를 쿼리할 때 플레이어의 전체 이름을 사용하여 단일 레코드를 찾습니다. 복합 인덱스 { last_name: 1, first_name: 1 } 이 이 경우를 다루고, 따라서 게임에서 인덱스 { last_name: 1 } 가 중복되므로 삭제해야 합니다.

이 예에서는 데이터베이스를 검색하는 데 coins 필드가 사용되지 않습니다. 인덱스 { coins: -1 }은 사용되지 않으므로 게임에서 제거해야 합니다.

이 예시에서는 게임이 끝나면 플레이어의 이름이 별 개수별로 내림차순으로 순위표에 표시됩니다. 게임에서는 { stars: -1 } 인덱스가 자주 사용되지 않더라도 players 컬렉션의 모든 문서를 스캔하는 것을 방지하기 위해 유지해야 합니다.

이제 게임에서 다음 인덱스를 사용합니다.

  • _id 기본적으로 인덱싱됩니다.

  • { last_name: 1, first_name: 1 }

  • { stars: -1 }

불필요한 인덱스를 제거하면 players 컬렉션에 더 많은 여유 공간이 생겨 쓰기를 더 빠르게 수행할 수 있습니다. 가장 빈번한 읽기는 해당 읽기를 지원하는 인덱스가 컬렉션에 여전히 존재하므로 성능이 저하되지 않습니다.

Ops Manager에서 불필요한 인덱스를 식별하려면 데이터 탐색기로 인덱스를 봅니다.

데이터 탐색기의 Indexes 탭에서 각 인덱스에 대한 Size, Usage 및 기타 정보를 볼 수 있습니다. 인덱스가 사용되지 않거나 다른 인덱스에 포함되는 경우 삭제해야 합니다. 인덱스가 사용되지 않거나 다른 인덱스에 포함되는 경우 제거해야 합니다.

Ops Manager에서 인덱스를 삭제하려면 데이터 탐색기로 인덱스를 삭제하세요.

돌아가기

무제한 배열 피하기