불필요한 인덱스 제거
이 페이지의 내용
개요
인덱스는 MongoDB에서 쿼리를 효율적으로 실행할 수 있도록 지원합니다. 그러나 생성하는 각 인덱스는 쓰기에 부정적인 성능 영향을 미치며 약간의 디스크 공간이 필요합니다.
불필요한 인덱스를 만들면 컬렉션이 비대해지고 쓰기 속도가 느려집니다. 애플리케이션이 수행하는 각 쿼리와 인덱스의 정당성 여부를 고려하세요. 필드가 데이터베이스 쿼리에 사용되지 않거나 인덱스가 중복되어 사용하지 않는 인덱스를 제거합니다.
불필요한 인덱스를 식별하여 삭제해야 합니다. Atlas UI 를 사용하여 Atlas 에서 인덱스를 관리 합니다.
예시
플레이어에게 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
Index
이 예제에서 게임은 데이터베이스에 플레이어 정보를 쿼리할 때 플레이어의 전체 이름을 사용하여 단일 레코드를 찾습니다. 복합 인덱스 { last_name: 1,
first_name: 1 }
이 이 경우를 다루고, 따라서 게임에서 인덱스 { last_name: 1 }
가 중복되므로 삭제해야 합니다.
coins
Index
이 예에서는 데이터베이스를 검색하는 데 coins
필드가 사용되지 않습니다. 인덱스 { coins: -1 }
은 사용되지 않으므로 게임에서 제거해야 합니다.
stars
Index
이 예시에서는 게임이 끝나면 플레이어의 이름이 별 개수별로 내림차순으로 순위표에 표시됩니다. 게임에서는 { stars: -1 }
인덱스가 자주 사용되지 않더라도 players
컬렉션의 모든 문서를 스캔하는 것을 방지하기 위해 유지해야 합니다.
이제 게임에서 다음 인덱스를 사용합니다.
_id
기본적으로 인덱싱됩니다.{ last_name: 1, first_name: 1 }
{ stars: -1 }
불필요한 인덱스를 제거하면 players
컬렉션에 더 많은 여유 공간이 생겨 쓰기를 더 빠르게 수행할 수 있습니다. 가장 빈번한 읽기는 해당 읽기를 지원하는 인덱스가 컬렉션에 여전히 존재하므로 성능이 저하되지 않습니다.
불필요한 인덱스 식별 및 제거
Atlas에서 불필요한 인덱스를 식별하려면 Atlas UI로 인덱스 보기를 참조하세요.
데이터 탐색기의 Indexes 탭에서 각 인덱스에 대한 Size, Usage 및 기타 정보를 볼 수 있습니다. 인덱스가 사용되지 않거나 다른 인덱스에 포함되는 경우 삭제해야 합니다. 인덱스가 사용되지 않거나 다른 인덱스에 포함되는 경우 제거해야 합니다.
Atlas에서 인덱스를 제거하려면 Atlas UI로 인덱스 제거를 클릭합니다.
자세히 알아보기
인덱스에 대한 자세한 내용은 인덱스를 참조하세요.
사용 사례에 맞는 인덱싱에 대해 자세히 알아보려면 인덱싱 전략을 참조하세요.
MongoDB는 인덱스 최적화를 포함하여 데이터베이스 성능 향상에 대한 무료 MongoDB University 과정인 모니터링 및 인사이트도 제공합니다.