MongoDB에서 인덱스를 생성하려면 createIndex() 메서드를 사용해야 합니다. 인덱스를 적절히 활용하면 대량의 데이터가 저장된 컬렉션에서도 쿼리 성능을 크게 향상시킬 수 있습니다.
기본 문법
MongoDB 셸에서 인덱스를 생성하는 기본 문법은 다음과 같습니다.
db.COLLECTION_NAME.createIndex({KEY:1})
여기서 KEY는 인덱스를 생성할 필드의 이름이며, 값 1은 오름차순(ascending)을 의미합니다. 내림차순(descending) 인덱스를 생성하려면 -1을 사용하면 됩니다.
Java에서 인덱스 생성하기
Java에서는 MongoDB 드라이버가 제공하는 createIndex() 메서드를 사용하여 인덱스를 생성할 수 있습니다. 이 메서드에는 인덱스의 정렬 방식(오름차순 또는 내림차순)과 인덱스를 생성할 필드 이름을 지정한 Indexes 객체를 전달합니다.
createIndex(Indexes.descending("name"));
예제 코드
다음은 Java 프로그램에서 MongoDB 컬렉션에 오름차순 인덱스를 생성하고, 생성된 인덱스 목록을 출력하는 전체 예제입니다.
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Indexes;
import org.bson.Document;
import com.mongodb.MongoClient;
public class CreatingIndex {
public static void main(String args[]) {
// MongoDB 클라이언트 생성
MongoClient mongo = new MongoClient("localhost", 27017);
// 데이터베이스 접근
MongoDatabase database = mongo.getDatabase("myDatabase");
// 컬렉션 생성
database.createCollection("sampleCollection");
// 인덱스를 생성할 컬렉션 가져오기
MongoCollection<Document> coll = database.getCollection("sampleCollection");
// 인덱스 생성
coll.createIndex(Indexes.ascending("age"));
System.out.println("인덱스가 성공적으로 생성되었습니다");
// 컬렉션에 존재하는 인덱스 목록 출력
for (Document index : coll.listIndexes()) {
System.out.println(index.toJson());
}
}
}
실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다. 기본적으로 모든 컬렉션에는 _id 필드에 대한 고유 인덱스가 자동으로 생성되며, 여기에 새로 만든 age 오름차순 인덱스가 추가된 것을 확인할 수 있습니다.
Index created successfully
{"v": 2, "key": {"_id": 1}, "name": "_id_", "ns": "myDatabase.sampleCollection"}
{"v": 2, "key": {"age": 1}, "name": "age_1", "ns": "myDatabase.sampleCollection"}
핵심 정리
- createIndex(): 컬렉션에 인덱스를 생성하는 메서드
- Indexes.ascending(): 오름차순 인덱스를 생성할 때 사용
- Indexes.descending(): 내림차순 인덱스를 생성할 때 사용
- listIndexes(): 컬렉션에 등록된 인덱스 목록을 확인할 때 사용
쿼리에서 자주 조회되거나 정렬 조건으로 많이 사용되는 필드에 인덱스를 설정하면 데이터베이스 전반의 응답 속도를 효과적으로 개선할 수 있습니다.