MongoDB 성능 최적화를 위한 색인 이해
KUKJIN LEE • 1개월 전 작성
MongoDB에서 색인(Index)은 데이터베이스 성능을 최적화하는 중요한 도구입니다. 색인을 사용하면 특정 필드에서 데이터를 빠르게 검색하거나 정렬할 수 있습니다.
색인은 데이터베이스에서 특정 필드를 미리 정렬된 자료 구조로 저장해 두는 것을 의미합니다. 이 자료 구조 덕분에 데이터를 검색하거나 정렬할 때, 모든 데이터를 처음부터 끝까지 훑는 대신, 정렬된 색인에서 빠르게 원하는 데이터를 찾아낼 수 있습니다.
(하지만 색인이 항상 성능을 향상시키는 것은 아닙니다. 오히려 대량으로 데이터를 가져와야 하거나, 불필요한 색인을 사용하게 될 경우, 색인 자체가 성능을 저하시켜 오히려 비효율적일 수 있습니다.)
데이터 a
, b
, c
, d
, e
, f
가 섞여 있는 상황에서, 우리가 title
이라는 필드를 기준으로 데이터를 검색한다고 가정해 봅시다. 색인이 없는 상태라면 MongoDB는 각 문서를 하나씩 전부 스캔해야만 title
을 찾을 수 있습니다. 반면, 색인이 있는 상태라면 title
필드를 기준으로 이미 정렬된 목록이 존재하므로, 빠르게 데이터를 찾아낼 수 있습니다.
색인 방법 예시
db.users.createIndex({ title: 1 });
users
컬렉션의 title
필드를 오름차순(1)로 정렬된 색인이 생성됩니다.
색인의 장점
-
빠른 검색: 색인을 사용하면 데이터 전부를 스캔할 필요 없이 정렬된 목록에서 빠르게 검색할 수 있다.
-
복잡한 쿼리 최적화: 색인을 사용하면 여러 조건을 조합한 복잡한 쿼리에서도 빠르게 데이터를 검색할 수 있다.
색인을 생성한다고 데이터가 변하는 건 아니다.
색인을 생성한다고 해서 컬렉션의 문서에 새로운 필드가 추가되거나, 데이터 자체가 변하는 것은 아닙니다. 색인은 MongoDB가 내부적으로 관리하는 별도의 자료 구조입니다. 이 자료 구조를 사용하여 쿼리 성능을 최적화할 수 있지만, 데이터는 그대로 유지됩니다.
(문서 자체는 변하지 않습니다. 단지 MongoDB 내부에서 색인이 추가되어 검색 성능이 향상됩니다.)
더 이상 사용하지 않는 필드에 대한 색인은 반드시 제거하기
색인을 생성한 후, 색인은 지속적으로 데이터베이스에 남아 있으면서 향후 쿼리에서도 사용됩니다. MongoDB에서 색인은 명시적으로 삭제해야 하며, 자동으로 제거되지 않습니다.
“색인은 빠른 처리를 돕지만, 지나치게 많은 색인은 성능에 악영향을 줄 수 있다. 필요한 필드에만 색인을 적용하는 것이 좋다.”