본문 바로가기
Database

인덱스( Index )

by 냉동커피 2021. 8. 29.

인덱스는 효율적인 자료 검색을 위해 레코드의 위치정보를 정렬된 상태로 관리하는 자료 구조이다.

 

일반적으로 테이블의 특정 컬럼 집합을 키(key)로하여 B+트리로 구현한다.

 

< B+트리 기반의 인덱스 구조 >

 

1. 연산

: 기본적으로 인덱스의 키에 해당하는 컬럼이 WHERE, ODER BY, JOIN에서 비교 연산으로 사용될 때 인덱스를 통해 수행된다.

 

- SELECT : 인덱스 범위 스캔(index range scan)을 통해 탐색할 범위를 구하여 해당 범위의 레코드만을 탐색

- INSERT : 리프 노드들의 연결리스트 간 정렬 상태를 유지하며 삽입

- DELETE : 해당 리프 노드를 삭제하지않고 상태만을 사용 안 함으로 체크하고 레코드를 삭제 -> 공간 차지

- UPDATE : DELETE 연산을 수행 후 INSERT 연산을 수행하는 결과적인 갱신 방식

 

 

2. 특징

 

테이블 내 모든 레코드를 탐색하는 full-scan이 아닌 인덱스 범위 스캔을 사용함으로써 매우 효율적인 탐색이 가능

인덱스를 관리하는 데에 추가 공간 및 작업이 필요

 - INSERT, DELETE, UPDATE와 같이 write 연산이 빈번한 경우 인덱스의 크기가 계속 증가해 역효과

 

 

3. 사용 시 주의사항

 

- 데이터 중복도가 낮은 컬럼으로 생성

- 인덱스 키의 첫번째 컬럼이 조건절에서 사용되지 않으면 full scan 또는 index seek으로 탐색

- NOT , IS NULL 사용 자제( 인덱스 사용 X )

 

 

4. 종류

 

- 클러스터드 인덱스( Clustered index ) : 테이블의 레코드 순서를 물리적으로 정렬시키는 인덱스로, 테이블 당 1개만 생성 가능하다. 별도의 공간을 사용하지 않는다. ( DBMS에 따라 기본키 컬럼으로 클러스터드 인덱스를 자동생성 하기도 함 )

 

- 넌-클러스터드 인덱스( Non-clustered index ) : 테이블의 레코드 주소를 특정 컬럼 집합에 대해 정렬한 상태로 관리하는 인덱스로, 테이블 당 1개 이상 생성 가능하다. 별도의 공간에 생성되어 관리된다.

'Database' 카테고리의 다른 글

무결성 제약조건( Integrity constraint )  (0) 2021.08.29
정규화( Normalization )  (0) 2021.08.29
데이터베이스( Database )  (0) 2021.08.29
SQL( Structured Query Language )  (0) 2021.08.27
데이터베이스 용어 정리  (0) 2021.08.24