■■■ Develop ■■■/[ Database ]

[ DB ] - 인덱스의 개념

시드라엘 2013. 7. 10. 11:12

1. 인덱스의 개념

- 책의 뒷부분에 있는 색인과 비슷한 개념

- 작은 데이터에는 없어도 큰 차이가 없지만, 대량의 데이터에는 인덱스가 있어야만 빠른 검색이 가능하다.

 

2. 인덱스의 장단점

1) 장점

- 검색 속도가 무척 빨라질 수 있다. (반드시 그런것은 아니지만)

- 그 결과 시스템의 부하가 줄어들어 시스템 전체 성능 향상에 도움이 된다.

2) 단점

- 인덱스가 데이터베이스 공간을 차지해 추가적인 공간이 필요해진다. (DB의 10퍼센트 내외의 공간이 추가로 필요)

- 인덱스를 생성하는데 시간이 많이 소요될 수 있다.

- 데이터 변경 작업이 자주 일어날 경우에 인덱스를 재작성해야 할 필요가 있기에 성능에 영향을 끼칠 수 있다.

 

3. 인덱스의 종류

1) 클러스터형 인덱스

- 영어사전과 비슷한 개념

- 클러스터형 인덱스는 테이블당 1개만 생성가능

- 클러스터형 인덱스는 행데이터를 인덱스로 지정한 열에 맞춰 자동정렬

- 인덱스 자체가 데이터

2) 비클러스터형 인덱스

- 일반 책의 찾아보기와 비슷한 개념

- 테이블당 여러개 생성 가능하다.

- 인덱스자체가 데이터가 아니라 인덱스가 가리키는 것이 데이터

 

4. 인덱스의 특징

- 제약조건없이 테이블 생성시에 인덱스를 만들 수 없다.

- 인덱스가 자동생성되기 위한 열의 제약조건은 Primary KEY와 Unique뿐

 

5. 인덱스의 내부동작

B-Tree (Balanced Tree, 균형트리)

- 범용적으로 사용되는 데이터구조

- 인덱스를 표현할 때 많이 사용된다.

- 데이터 검색시 뛰어난 성능을 보인다.

- 데이터 변경시 성능이 나빠진다.

- 구성 : 루트노드 + 중간노드 + 리프노드

 

6. 인덱스의 구조

1) 클러스터형 인덱스

데이터를 추가하면 데이터 분할이 필요하다. 리프페이지가 하나 늘어나고 루트페이지에 데이터페이지를 하나 더 등록시켜준다.

2) 비클러스터형 인덱스

정렬을 하지 않으므로 빈 공간이 존재하면 빈 공간에 바로 들어갈 수 있다.

비클러스터형 인덱스에 데이터추가에 있어서 클러스터형 인덱스보다 효율적이다.

 

7. 인덱스를 생성해야 하는 경우와 그렇지 않은 경우

- 인덱스는 열 단위로 생성된다.

- WHERE절에서 사용되는 컬럼을 인덱스로 만든다.

- WHERE절에서 사용되더라도 자주 사용해야 가치가 있다.

- 데이터의 중복도가 높은 열은 인덱스로 만들어도 효용이 없다. (예 : 성별, 타입이 별로 없는 경우, 적은경우)

- 외래키가 사용되는 열에는 인덱스를 되도록 생성해주는 것이 좋다.

- JOIN에 자주 사용되는 열에는 인덱스를 생성해주는 것이 좋다.

- INSERT / UPDATE / DELETE가 얼마나 자주 일어나는지를 고려한다.

- 클러스터형 인덱스는 하나만 생성할 수 있다. (없을 수도 있다.)

- 클러스터형 인덱스가 테이블에 아예 없는 것이 좋은 경우도 있다.

- 사용하지 않는 인덱스는 제거하자