인덱스( Index )

인덱스( Index )

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

일반적으로 테이블의 특정 컬럼 집합을 키(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개 이상 생성 가능하다. 별도의 공간에 생성되어 관리된다.

from http://decaf-brain.tistory.com/32 by ccl(A) rewrite - 2021-08-29 02:00:39