데이터베이스 인덱스에 대해서

INDEX

인덱스는 말 그대로 데이터를 찾는데 도움을 주는 색인이다. 데이터베이스에서 테이블의 특정 데이터를 검색하려면 시간이 오래걸리게 되는데 이때 칼럼의 값과 해당 레코드가 저장된 주소를 키와 값의 쌍으로 인덱스를 만든다.

하지만 검색속도를 높이기 위해 다른 성능을 희생해야만 한다. 값을 삭제, 수정, 추가 하는 경우에는 인덱스를 재정의 해야하므로 시간이 더 걸리게 된다.

INDEX를 적용하기 위해 고려할 점

앞서 말했듯이 SELECT문의 성능의 향상을 위해 INSERT, UPDATE, DELETE문의 작업시 별도의 과정이 추가되므로 인덱스를 남용하는 것은 올바르지 않다.

이러한 인덱스를 적절하게 사용하려면 효율적인 데이터 형식을 선정해야 한다.

예를 들어, 이름, 나이, 성별 세가지의 컬럼중에 인덱스를 어떤것으로 할지 고려해보자.

  • 이름 : string 형식의 다양한 범위
  • 나이 : INT 형식의 정수 범위(대략 0~100)
  • 성별 : 남, 녀의 2가지의 한정된 범위

여기서 성별이나 나이는 한정된 범위를 가지지만 이름은 매우 다양해서 고른 분포를 가지게 될 것이다. 따라서 최소의 인덱스 탐색으로 찾을 확률이 높아 디스크 입출력을 줄이게 되어 성능향상이 가능하다. 성별과 같이 분포도가 2가지로 한정된 것은 성별내에서도 또 다시 탐색을 위해 디스크 입출력이 발생하기 때문에 인덱스로서 좋은 선택이 아니게 된다.

인덱스 선정시 포함해야할 컬럼의 특징

  1. Where 절에 자주 사용되는 컬럼
  2. 테이블 조인을 위해 연결고리로 자주 사용되는 컬럼
  3. 분포도가 좋거나 유일한 컬럼
  4. Select 문의 MAX, MIN 기준이 되거나 정렬에 자주 사용되는 컬럼