본문 바로가기

DB

[DB] 인덱스란?

인덱스란?

 

- 데이터 레코드를 빠르게 접근하기 위해 <키 값, 포인터> 쌍으로 구성되는 데이터 구조이다.

 

- 데이터가 저장된 물리적 구조와 밀접한 관계

 

- 인덱스를 통해 파일의 레코드에 대한 액세스를 빠르게 수행

 

- 레코드의 삽입과 삭제가 수시로 일어나는 경우에는 인덱스의 개수 최소화

 

- 인덱스가 없으면 특정한 값을 찾기 위해 모든 데이터 페이지를 확인하는 TABLE SCAN 발생

 

EX)

 

예를 들어 하나의 책을 샀는데 인덱스에 대한 설명이있는 페이지를 찾고싶다.

 

인덱스란 설명은 555페이지에 있다고 가정하면 시작 페이지부터 끝페이지 까지 찾아야되는 번거로움이 있다.

 

여기서 해당 책의 목차가 인덱스라고 생각하면 된다.

 

책 = A테이블

 

목차 = A테이블의 검색 속도를 향상시키기 위한 인덱스

 

목차는 해당 내용별로 몇페이지 인지 정의가 되어있기 때문에 위에서 말한 <키값, 포인터>가 <찾을려는 내용, 해당페이지> 라고 생각하면 이해가 될것이다.

 

인덱스의 종류

 

종류 설명
트리 기반 인덱스 인덱스를 저장하는 블록들이 트리구조를 이루고 있는 것으로 상용 DBMS에서는 트리구조 기반의 B+ 트리 인덱스를 주로 활용
비트맵 인덱스 인덱스 컬럼의 데이터를 Bit 값인 0 또는 1로 변환하여 인덱스 키로 사용
함수 기반 인덱스 컬럼의 값 대신 컬럼에 특정함수를 적용하여 산출된 값을 사용
비트맵 조인 인덱스 다수의 조인된 객체로 구성된 인덱스
도메인 인덱스 개발자가 필요한 인덱스를 직접 만들어 사용

 

인덱스 대상 테이블 선정 기준

 

- 랜덤 액세스가 빈번한 테이블

 

- 특정 범위나 특정 순서로 데이터 조회가 필요한 테이블

 

- 다른 테이블과 순차적 조인이 발생하는 테이블

 

인덱스 대상 컬럼 선정 기준

 

- 인덱스 컬럼의 분포도가 10~15% 이내인 컬럼

 

- 분포도가 10~15% 이상이어도 부분 처리를 목적으로 하는 컬럼

 

- 가능한 한 수정이 빈번하지 않은 컬럼

 

- ORDER BY, GROUP BY, UNION 이 빈번한 컬럼

 

- 분포도가 좁은 컬럼은 단독 인덱스로 생성

 

- 인덱스들이 자주 조합되어 사용되는 경우 하나의 결합 인덱스로 생성