본문 바로가기
개인공부

DB Index란 무엇인가

by 유혁. 2019. 5. 29.

1. Index란

테이블의 저장된 데이터를 빠르게 조회하기 위한 데이터베이스 객체이다.

 

테이블생성, 수정, 삭제 할때 데이터 레코드는 순서없이 저장되며, 저장되는 영역을 Heap이라고 한다.

Heap에서는 인덱스가 없는 테이블을 찾을 때 전체 데이터 페이지를 처음부터 끝까지 다 읽어서 검색하게 된다.

Table scan, Full Scan이라고 하며, 전체를 비교하여 찾기때문에 처리속도가 떨어진다. 인덱스는 풀스캔하지 않고 빠르게 검색 할 수 있도록 하기위해 사용한다.

 

2. Index 생성 주의사항

인덱스 생성 컬럼은 where절, order by 등 사용빈도가  높고 키 값의 선별이 좋은 컬럼에 사용하는것이 좋다.

빈도가 낮고 T/F,  M/F,  테이블이 작거나 자주 갱신될 때에도 인덱스를 사용하지 않는것이 더 좋다.

 

3. 활용방법

where 절에서 사용하는 컬럼들

like '%A%' (X) -> 'A%' (0)   전자의 조건은 FullScan으로 처리됨

between A and B  클러스티드 인덱스에서 유리

order by에 사용되는 컬럼

join으로 사용되는 컬럼

Foreign Key (1:1)이 많은 경우

Foreign Key (1:N)이 많은 경우  클러스티드 인덱스 유리

100만건중 10건의 데이터 조회  찾는건이 적은 컬럼에 인덱스 설정

  - 중복은 많은 컬럼은 인덱스를 피하는게 좋음

  - 조회되는 건 수가 많으면 Full Scan이 더 좋음

not 연산자를 긍정문으로 변경

insert, delete 등 데이터의 변경이 많은 컬럼은 인덱스 걸지 않는것이 좋음

  - 저장공간에 대하여 인덱스를 다시 조정해줘야 하기 때문에 자원소모가 많음

결합 인덱스의 경우 중복도가 낮은순에서 높은순으로 생성해야 성능 향상

 

4. Index 종류

- 클러스티드 인덱스

클러스티드 인덱스는 물리적으로 행을 재배열 하는 특징이 있다.

넌 클러스티드 인덱스보다 페이지 용량이 작다.

선택도 30% 이내에서 사용해야 좋다.

테이블당 1개만 사용할 수 있다.

 

- 논 클러스터 인덱스

물리적으로 재배열하지 않는다.

클러스터 인덱스보다 용량이 크다 (참조하는 인덱스 페이지가 따로존재)

선택도 3%이내에서 사용해야 좋다

테이블당 249개(여러개)

 

5. 인덱스의 종류

1. Primary Key : Key중복이 될 수 없으며 1:1매칭이 되어야하는 키. 정수형 필드나 auto_increment를 함께 사용

2. Unique Index : 값이 중복될 수 없으나, null은 가질 수 있는 인덱스.

3. FULLTEXT : 일반적인 인덱스와는 다르게 모든 텍스트 필드를 검색함.

 

 

6. 인덱스 생성방법

* 추가 방법

1. CREATE INDEX <인덱스명> ON <테이블명> (컬럼명1, 컬럼명2, ...);

2. ALTER TABLE <테이블명> ADD index <인덱스명> (컬럼명1, 컬럼명2, ....);

 

3. ALTER TABLE <테이블명> ADD INDEX(컬럼명(자료형사이즈)); 

= ALTER TABLE TableName ADD INDEX(ColName(ColSize)); 

 

* 테이블 생성시 만들기

스키마 생성문 뒤에...

INDEX <인덱스명> ( 컬럼명1, 컬럼명2 )

UNIQUE INDEX <인덱스명> ( 컬럼명 )  <-- 필수

 

*인덱스 보기

show index from <테이블명>;

 

*인덱스 삭제

ALTER TABLE <테이블명> DROP INDEX <인덱스명>;