MONGODB

인덱스 개념 완벽하게 이해하기

인덱스 개념 완벽하게 이해하기

인덱스 설정이란

인덱스 설정은 DBMS가 데이터에 접근할 때 랜덤 엑세스하기 위해 데이터를 순차적으로 넣는 것을 말한다. 데이터베이스에서 정렬(order by)를 자주하게 되는 필드에 인덱스 설정을 하게 되면 데이터가 순차적으로 들어가기 때문에 풀스캔(Full Scan)하지 않고 이진 검색(Binary Search)으로 데이터를 효율적으로 찾을 수 있게된다.

Full Scan

데이터를 처음부터 끝까지 모두 스캔하여 원하는 데이터를 찾아내는 방식. 데이터가 정렬되어 있지 않으면 이 방법을 사용할 수 밖에 없다.

fullscan

Binary Search

데이터를 반으로 나누어가면서 원하는 데이터를 찾아내는 방식. 이는 데이터가 정렬되어 들어가 있기 때문에 가능한 방법이다.

index
Primary key는 무조건 index 설정이 된다.

인덱스와 풀스캔 구분하기

인덱스 설정을 한다고 무조건 좋은 것은 아니다. where 절에 걸리는 필드를 인덱스로 설정하는 것이 일반적이지만 데이터의 종류와 프로그램에 따라 인덱스 설정이 오히려 해가 되기도 한다.

예제로 이해하기

아래의 그림에서 데이터를 풀스캔하여 찾으려고 한다. 데이터를 하드디스크에서 가지고 올 때 한번에 3개씩 가져온다고 치면 2번의 접근으로 ‘딸기’와 ‘사과’를 찾아낼 수 있다.

fullscan

 

하지만 랜덤 엑세스를 한다면 ‘딸기’를 찾는 것은 2번의 접근으로 가능하지만 ‘사과’를 찾는 것은 5번의 접근이 필요하다.

<딸기 찾기>
binary scan

 

<사과 찾기>
binary scan

 

이처럼 동일한 데이터(사과)의 양이 많은 경우에는 렌덤 엑세스를 하는 것보다 풀스캔을 하는 것이 더 효율적일 수도 있다.

한눈에 보기

인덱스
  1. 동일한 데이터의 양이 많으면 비효율적이다.
  2. 동일한 데이터의 양이 적고 데이터의 규모가 크면 매우 효율적이다.
  3. 인덱스할 때 재배열하기 때문에 오래걸린다.
풀스캔
  1. 데이터의 규모가 작으면 매우 효율적이다.
  2. 데이터의 규모가 크면 매우 비효율적이다.

인덱스 설정하는 방법

인덱스 설정하기
db.collection.createIndex({_id:1});
1은 값이 아니라 true

 

인덱스 설정 확인하기
db.collection.getIndexs();

 

MongoDB
[Mac]몽고디비 샤딩과 리플리카셋 구성하는 방법1. 폴더 생성 2. Config-Server 설정 3. Shard-Server 설정 4. Mongos-Server 설정...
최신글