유혁의 개발 스토리

DB Index란 무엇인가 본문

개인공부

DB Index란 무엇인가

유혁. 2019. 5. 29. 16:05

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 <인덱스명>;