본문 바로가기
CS/DB

인덱스(Index)

by ilyadelavie 2022. 8. 9.

개요


  • 인덱스란 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조로 키 값으로 행 데이터의 위치를 식별하여 사용한다.
  • 테이블의 컬럼을 색인화하여 별도 파일로 저장하기 때문에 해당 테이블의 레코드를 Full scan 하지 않는다.

 

//인덱스 생성
CREATE INDEX 인덱스명 ON 테이블명 (컬럼명);
ALTER TABLE 테이블명 ADD INDEX 인덱스명 (컬럼명);

//인덱스 삭제(수정은 DROP 후 재생성)
ALTER TABLE 테이블명 DROP INDEX 인덱스명;

 

인덱스의 관리

  • DBMS는 인덱스를 항상 최신의 정렬된 상태로 유지해야 원하는 값을 빠르게 탐색할 수 있다. 
  • 이 때문에 인덱스가 적용된 컬럼에 INSERT,UPDATE,DELETE가 수행된다면 아래와 같은 연산을 추가적으로 해주어야 한다. (오버헤드 발생)
    • INSERT : 새로운 데이터에 대한 인덱스를 추가
    • UPDATE : 기존의 인덱스를 사용하지 않음 처리하고 갱신된 데이터에 대해 인덱스를 추가
    • DELETE : 삭제하는 데이터의 인덱스를 사용하지 않는다는 작업 처리

 

인덱스의 장단점


장점

  • 테이블을 조회하는 속도를 향상시킬 수 있다.
  • 전반적인 시스템의 부하를 줄일 수 있다.

단점

  • 인덱스를 관리하기 위해 DB의 약 10%에 해당하는 저장 공간이 필요하다.
  • 인덱스를 관리하기 위한 추가 작업이 필요하다.
  • 인덱스를 잘못 사용할 경우 오히려 성능이 저하될 수 있다.

 

인덱스를 사용하면 좋은 경우


  • 데이터의 중복도가 낮은 컬럼
  • INSERT, UPDATE, DELETE가 자주 발생하지 않는 컬럼
  • JOIN이나 WHERE 또는 ORDER BY에 자주 사용되는 컬럼

함께 고려해보면 좋은 것

  • 인덱스 키의 크기는 되도록 작게 설계되어야 성능에 유리하다.
  • 분포도가 좁은 범위,PK,JOIN과 연결 고리과 되는 컬럼을 인덱스로 구성한다.
  • 단일 인덱스 여러 개보다 다중 컬럼 인덱스를 구성하는게 좋다.
  • 인덱스 생성 시 가장 효율적인 자료형은 정수형 타입이다. 가변적인 크기와 정규화 할 수 없는 데이터는 인덱스 생성 시 비효율적으로 동작한다.

 

 

인덱스를 구현한 자료구조


해시 테이블

B+TREE

'CS > DB' 카테고리의 다른 글

데이터베이스 개요  (0) 2022.08.03