본문 바로가기
데이터베이스

인덱스란?

by 성건희 2019. 10. 17.
반응형

인덱스란?

  • 색인
  • 데이터베이스 객체
  • 책의 '목차'
  • 작은 데이터는 인덱스가 없어도 큰 차이가 없지만, 대량의 데이터에는 인덱스가 있어야 빠른 검색이 가능하다.

 

인덱스가 작성되지 않은 테이블은 Full table scan을 합니다.
모든 테이블을 조사하므로 단순하지만 성능이 느립니다.
따라서 인덱스를 사용하여 검색속도를 높일 수 있습니다.

 

인덱스에 쓰이는 대표적 알고리즘

  • B Tree
    원하는 수치와 비교해서 더 크면 오른쪽 가지로, 작으면 왼쪽 가지를 조사해 나갑니다.
    이진 트리는 같은 값을 가지는 노드를 여러 개 만들 수 없어 '유일성'을 보장합니다.
  • 해시
    검색하고자하는 값을 해시함수에 입력한 후 그 결과와 Bucket의 내용과 비교하여
    해당 데이터 레코드의 위치를 찾을 수 있는 인덱스 기법입니다.
    장점은 인덱싱할 필드 값들을 해시 함수를 통해서 계산된 해시 값으로 인덱스를 만들기 때문에 검색대상이 되는 필드 값의 길이에 관계 없이 빠른 검색 기능을 제공할 수 있다는 점입니다.
    단점은 이미 한번 가공된 값으로 인덱싱을 구현하기 때문에 정확히 일치하는 값만 검색이 가능합니다.
    (즉, 범위 검색이나 부분 일치 검색은 해시 인덱스를 이용할 수 없다고 합니다.)
    MYSQL에서는 기본적으로 해시 인덱스가 제공되지 않습니다.

 

인덱스 작성 / 삭제

인덱스는 데이터베이스 객체이므로 DDL을 사용하여 작성 / 삭제합니다.

CREATE INDEX
CREATE INDEX 인덱스명 ON 테이블명 (열명1, 열명2 ...)

DROP INDEX 인덱스명
DROP INDEX 인덱스명 ON 테이블명

 

EXPLAIN

실제로 인덱스를 사용해서 검색을하는지 확인할 때 쓰입니다. (실행계획을 확인하는 명령어)

EXPLAIN SELECT * FROM person WHERE age > 10;

possible_keys : 사용될 수 있는 인덱스가 표시됨 key : 사용된 인덱스가 표시됨

 

인덱스의 장점

  • 검색속도(SELECT) 향상
  • 시스템 부하가 줄어들어 시스템 전체 성능 향상에 도움이 됩니다.

 

인덱스의 단점

  • 인덱스가 데이터베이스 공간을 차지해 추가적인 공간이 필요해집니다.
  • 인덱스를 생성하는데 시간이 많이 소요될 수 있습니다.
  • 데이터 변경 작업이 자주 일어날 경우 인덱스를 재작성해야 할 필요가 있기에 성능에 영향을 끼칠 수 있습니다.

 

최적화

내부 처리에서 SELECT 명령을 실행하기 앞서 실행계획을 세웁니다.
인덱스의 유무뿐만 아니라 인덱스를 사용할 것인지 여부에 대해서도
데이터베이스 내부의 최적화 처리를 통해 판단합니다.
예를 들어 데이터의 종류가 적으면 적을 수록 인덱스를 사용했을 때의 효율이 줄어듭니다.
하지면 서로 다른 값으로 여러 종류의 데이터가 존재하면 그만큼 효울이 좋아집니다.
이처럼 인덱스의 품질을 고려해 실행계획이 세워집니다.

 

반응형

댓글