인덱스 고려 사항 및 관리
개요
이 가이드 에서는 인덱스 를 사용하여 쿼리 효율성 을 높이고 문서 쿼리 및 저장에 기능을 추가하는 방법을 학습 수 있습니다.
관련 인덱스 가 없으면 MongoDB 는 컬렉션 의 모든 문서 를 스캔하여 쿼리 와 일치하는 문서를 찾습니다. 이러한 컬렉션 스캔은 속도가 느리고 애플리케이션 성능에 부정적인 영향을 미칠 수 있습니다. 그러나 적절한 인덱스 가 있는 경우 MongoDB 는 인덱스 를 사용하여 검사할 문서 수를 줄일 수 있습니다.
운영 고려 사항
쿼리 성능을 향상시키려면 애플리케이션의 쿼리 또는 정렬된 결과를 반환하는 작업에 자주 나타나는 필드에 인덱스를 빌드 합니다. 추가하는 각 인덱스 는 디스크 공간과 메모리를 사용하므로 용량 계획을 수행할 때 메모리와 디스크 사용량을 추적 하는 것이 좋습니다. 또한 쓰기 (write) 작업이 인덱싱된 필드 를 업데이트할 때 MongoDB 는 관련 인덱스 를 업데이트하므로 쓰기 (write) 작업의 성능에 부정적인 영향 을 미칠 수 있습니다.
MongoDB 애플리케이션 에서 와일드카드 인덱스 를 사용하여 이름이 미리 알려지지 않았거나 임의적인 필드를 쿼리 할 수 있습니다. 와일드카드 인덱스는 워크로드 기반 인덱스 계획을 대체하도록 설계 되지 않았습니다 .
데이터 모델 설계 및 인덱스 선택에 학습 보려면 MongoDB Server 매뉴얼의 운영 요인 및 데이터 모델 가이드 의 인덱스 섹션을 참조하세요.
샘플 데이터
이 가이드 의 예제에서는 Atlas 샘플 데이터 세트 의 sample_mflix
데이터베이스 에 있는 movies
컬렉션 을 사용합니다. 무료 MongoDB Atlas cluster 를 생성하고 샘플 데이터 세트를 로드하는 방법을 학습 보려면 Atlas 시작하기 가이드 를 참조하세요.
인덱스 만들기
MongoDB 는 데이터 쿼리 에 도움이 되는 여러 인덱스 유형을 지원합니다. 다음 페이지에서는 다양한 인덱스 유형을 설명하고 각 유형의 인덱스 를 프로그래밍 방식으로 생성하기 위한 샘플 코드를 제공합니다.
인덱스 나열
MongoDB\Collection::listIndexes()
메서드를 호출하여 컬렉션 의 인덱스 목록을 조회 할 수 있습니다.
foreach ($collection->listIndexes() as $indexInfo) { echo $indexInfo; }
인덱스 제거
_id
필드에서 기본값 고유 인덱스를 제외한 사용하지 않는 인덱스를 제거할 수 있습니다.
다음 섹션에서는 컬렉션 에서 하나 이상의 인덱스를 제거 하는 방법을 보여주는 예를 제공합니다.
단일 인덱스 삭제
컬렉션 에서 인덱스 를 제거 하려면 인덱스 이름을 MongoDB\Collection::dropIndex()
메서드에 전달합니다.
다음 예시 에서는 movies
컬렉션 에서 '_title_'
인덱스 를 제거합니다.
$collection->dropIndex('_title_');
참고
복합 인덱스 에서는 단일 필드 를 제거 할 수 없습니다. 인덱싱된 필드를 업데이트 하려면 전체 인덱스 를 삭제하고 새 인덱스를 만들어야 합니다.
모든 인덱스 삭제
컬렉션 에서 MongoDB\Collection::dropIndexes()
메서드를 호출하여 모든 인덱스를 삭제 수 있습니다.
$collection->dropIndexes();
dropIndexes()
메서드는 제거된 인덱스 수에 대한 정보와 성공 메시지를 반환합니다.
API 문서
이 가이드에서 사용되는 메서드 또는 유형에 대해 자세히 알아보려면 다음 API 설명서를 참조하세요.