본문 바로가기
데이터베이스

인덱스의 유형과 특징

by 다시쓰는 2023. 9. 20.
반응형
인덱스는 전체 내용 물 중에서 특정한 부분을 바로 찾을 수 있는 목차나 색인의 개념
사용자가 임의적으로 생성하고 변경하며 삭제할 수 있는 데이터베이스 내에 실질적으로 저장되는 물리적 구조체를 말한다.
인덱스를 보는 시각에도 문제가 있다.
인덱스는 좋은 것이며 좋은 것이 많으면 더 좋아질 것이라는 생각이다.
하지만 인덱스는 어떻게 생성하느냐에 따라 매우 커다란 차이가 난다. 그 이유는 옵티마이져와 관련이 있다.
인덱스는 옵티마이져가 실행 계획을 수립할 때 최적의 경로를 찾도록 하는 전략적 요소라는 시각에서 접근해야 한다.

 

인덱스의 유형

- B-Tree 인덱스, 비트맵 인덱스, B-Tree 클러스터 인덱스, 해쉬 클러스터 인덱스, 리버스 키 인덱스, 비트맵 조인 인덱스, 함수기반 인덱스 등이 있다

 

B-Tree 인덱스 특징 및 작동 원리

B-Tree 인덱스는 가징 일반적으로 사용되는 인덱스이다. 

- 균형 트리 구조는 모든 리프 노드가 동일한 레벨에 위치하고 이것은 효율적인 검색 및 삽입/삭제 작업을 가능하게 한다.

- 범위 검색에 매우 효율적이다. 주어진 값의 범위 내에서 데이터를 검색하는 경우 B-TREE 인덱스는 빠른 성능을 제공한다.

- 데이터를 추가하거나 삭제할 때 쉽게 조정할 수 있는 구조이며 이것은 데이터베이스의 동적인 성격에 적합하다.

-  새로운 데이터가 추가될 때마다 자동으로 균형을 유지하며, 트리의 높이를 일정하게 유지한다. 이것은 검색 성능을 일관되게 유지하는 데 도움이 된다.

- 페이지 단위로 데이터를 읽고 쓸 수 있으므로, 디스크 I/O작업을 최소화하면서 데이터를 검색할 수 있다.

 

B-Tree 인덱스의 생성방법

1. 테이블 및 칼럼 선택 : 어떤 테이블에 어떤 칼럼에 인덱스를 생성할지 선택한다. 일반적으로 검색 또는 조인에 자주 사용되는 칼럼에 인덱스를 생성한다.

 

2. CREATE INDEX 문 사용 : 선택한 테이블의 칼럼에 대한 인덱스를 생성하기 위해서는 데이터베이스 시스템에서 제공하는 'CREATE INDEX' 문을 사용한다.

 

CREATE INDEX index_name ON table_name (column_name);

 - index_name : 생성할 인덱스의 이름을 지정

 - table_name : 인덱스를 생성할 테이블의 이름을 지정

 - column_name : 인덱스를 생성할 칼럼의 이름을 지정

 

 만약 "employees" 테이블의 "last_name"칼럼에 대한 인덱스를 생성하려면 아래와 같이 한다.

 

 CREATE INDEX idx_last_name ON employees (last_name);

 

3. 인덱스 최적화 : 인덱스 생성 후에 인덱스를 최적화하는 옵션을 제공한다. 이를 통해서 성능을 향상시키고 인덱스 공간을 최적화할 수 있다. 최적화 옵션은 DBMS에 따라 다를 수 있다.

 

4. 인덱스 사용 : 생성한 B-Tree인덱스는 쿼리에서 사용할 수 있다. 인덱스를 활용하여 빠른 검색할 수 있다.

 

인덱스 생성할 때 주의할 점은 인덱스가 데이터베이스 공간을 사용하므로 필요한 인덱스만 생성하고 필요하지 않은 인덱스는 생성하지 않는 것이 중요하다. 불필요한 인덱스는 데이터베이스 성능을 저하시킨다.

 

인덱스 블록의 분할

 인덱스 로우는 정렬이 되어 저장되어야 한다는 이유 떄문이 이미 생성된 구조에 새로운 로우가 삽입되면 기존의 위치에 파고 들어가야 하는 문제가 생긴다. 

 분할은 일반적으로 중간값을 기준으로 블록을 두개로 나누는 것을 의미한다. 새로운 데이터가 중간값보다 작으면 하나의 블록에 저장하고 중간값보다 크면 다른 블록에 저장한다.

 이렇게 분할된 블록은 균형을 유지하면서 삽입 작업을 수행한다.

 

인덱스 블록의 병합

데이터가 삭제되면 테이블의 로우는 제거되지만 인덱스의 로우는 단지 삭제되었다는 플래그만 추가된다. 이 때 인접한 블록 중 하나와 병합할 수 있다. 병합은 B-Tree 높이를 유지하면서 삭제된 데이터 공간을 최적화하는 데 사용된다.

병합 작업을 통해 불필요한 블록을 제거하고 높이를 유지하며 데이터으이 논리적인 순서를 유지한다.

 

반응형

'데이터베이스' 카테고리의 다른 글

함수기반 인덱스(FBI, Fuction-Baseed Index)  (0) 2023.09.21
리버스 키 인덱스와 비트맵 인덱스  (1) 2023.09.20
해쉬(Hash) 클러스터링  (0) 2023.09.18
클러스터링 테이블  (0) 2023.09.17
log4j 보안 취약점  (0) 2021.12.21