인덱스는 효율적인 자료 검색을 위해 레코드의 위치정보를 정렬된 상태로 관리하는 자료 구조이다.
일반적으로 테이블의 특정 컬럼 집합을 키(key)로하여 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 |