인덱스 테이블에 대하여 알아보겠습니다. 인덱스 테이블(Indexes Table)이란 무엇일까요? 인덱스 테이블은 데이터베이스를 검색하기 위해 사용할 수 있는 특별한 테이블로써 데이터베이스 검색의 속도를 빠르게(?) 도와주는 역할을 합니다. 즉 데이터베이스를 사용하는데 있어 성능에 대한 문제 또는 개선을 위해 가장 먼저 확인하는 부분이 바로 인덱스 테이블입니다.

인텍스 테이블은 테이블의 검색 속도를 빠르게 할 수 있는 별도의 테이블입니다. 이는 저절로 생성되지 않으며 관리자 또는 사용자에 의해 별도로 생성하거나 삭제할 수 있습니다. 이런 인덱스 테이블은 매우 간단한 방법을 통해 생성할 수 있으며 이에 대한 방법은 아래에 다뤄보도록 하겠습니다.

인덱스 테이블은 간단하게 예를들어 책의 목차를 만드는 과정과 동일합니다. 만약 책에 목차가 있다면 원하는 결과를 더 쉽게 찾을 수 있을 것입니다. 이처럼 유용한 인덱스(Index)를 간단하게 설명하겠습니다.


# 인덱스(Index) 테이블이란 무엇인가
- 인덱스는 데이터베이스를 빠르게 검색할 수 있도록 도와주는 테이블로서 아래와 같은 특징을 갖는다.

i. 인덱스를 한번 생성할 경우 매번 따로 조작할 필요가 없다.
ii. 인덱스는 기존 테이블의 컬럼을 변경하는 것이 아니라 새로 생성하므로 독립적인 객체이다.
iii. 인덱스는 언제든 추가할 수 있고 삭제 역시 언제나 가능하다.
iv. 인덱스 사용을 위한 다양한 트리(tree)방법이 존재한다.


이런 인덱스를 생성하는 것은 매우 중요한 데이터베이스 관리 기법 중 하나라고 할 수 있습니다. 그 이유는 인덱스 테이블을 생성하는 것으로 페이지 로딩 및 데이터베이스 검색 시간이 눈에 띄게 줄 수 있기 때문입니다. (단, 어떤 방식을 사용하느냐에 따라 Full Scan Table 방식이 더 효과적일 수도 있습니다.)


# 인덱스 유형. 인덱스의 생성 방식
인덱스는 아래와 같이 세가지 유형을 가지며 생성할 수 있습니다.

1. 단일 컬럼 인덱스(Single Column Indexes)
2. Unique 인덱스(Unique Indexes)
3. 조합(연결) 인덱스 (Composite Indexes)



각각의 인덱스 생성 방식은 나름대로의 장점과 단점을 가지고 있기 때문에 무엇이 좋다라고 단언할 수는 없으며 상황에 맞게 적절한 인덱스를 생성하여야 합니다.

간단하게 아래는 사용방법 및 생성 방법입니다.


1. 단일 컬럼 인덱스
; 오직 하나의 컬럼만 인덱스로 가짐

CREATE INDEX 인덱스이름
ON 테이블이름 (컬럼이름);


2. Unique 인덱스
; 지정된 컬럼(필드)의 값 고유함

CREATE UNIQUE INDEX 인덱스이름
ON 테이블이름 (컬럼이름);


3. 조합 인덱스
; 조합 인덱스는 두 개 또는 그 이상의 컬럼을 테이블에 가짐

CREATE INDEX 인덱스이름
on 테이블이름 (컬럼이름1, 컬럼이름2, ...);


# 인덱스 컬럼 삭제 방법
존재하는 인덱스를 삭제할 경우 DROP 키워드를 사용하여 삭제가 가능합니다. 인덱스 테이블의 삭제는 성능과 밀접한 관계를 가지므로 삭제할 경우 항상 주의를 해야합니다.

!! 참고로 인덱스 테이블은 한번 설정하면 수정할 수가 없습니다. 그렇기 때문에 수정을 원하는 경우 삭제 후 재생성하는 방법을 사용하여야합니다. 이때는 DROP 그리고 INDEX 키워드를 함께 사용하여 삭제합니다.

DROP INDEX 삭제할 인덱스명;