인덱스(Index)란?
- 인덱스는 데이터를 빠르게 검색할 수 있는 방법을 제공한다.
- 인덱스는 인덱스 키(ex EMPNO)로 정렬(SORT)되어 있기 때문에, 원하는 데이터를 보다 빠르게 조회한다.
- 오름차순(Ascending), 내림차순(Descending) 탐색이 가능하다.
- 하나의 테이블에서 여러 개의 인덱스를 생성할 수 있고, 하나의 인덱스는 여러 개의 칼럼으로 구성될 수 있다.
- 테이블을 생성할 때 Primary Key에는 자동으로 인덱스가 만들어지고, 인덱스의 이름은 SYSXXXX이다.
- 인덱스의 구조는 Root Block, Branch Block, Leaf Block으로 구성되고, Root Block은 인덱스의 트리에서 가장 상위에 있는 노드를 의미하며, Branch Block은 다음 단계의 주소를 가지고 있는 포인터로 되어 있다
- Leaf Block은 인덱스 키와 ROWID로 구성되고, 인덱스 키는 정렬되어 저장된다.
인덱스 생성
CREATE INDEX
문을 사용하여 생성이 가능하다.
- ex)
CREATE INDEX IND_EMP ON EMP (ENAME ASC, SAL DESC)
- ENAME에 대해 오름차순, SAL에 대해 내림차순으로 정렬하는 인덱스 IND_EMP를 생성.
인덱스 스캔(Index Scan)
- 인덱스 유일 스캔(Index Unique Scan)
- 인덱스의 키 값이 중복되지 않는 경우, 해당 인덱스를 사용할 때 발생한다.
- 인덱스 범위 스캔(Index Range Scan)
- SELECT문에서 특정 범위를 조회하는 WHERE문을 사용할 경우 발생한다.
- Like, Between이 대표적인 예이다. 단, 데이터 양이 적은 경우에는 인덱스 자체를 실행시키지 않고 TABLE FULL SCAN이 될 수 있다.
- Index Range Scan은 인덱스의 Leaf Block의 특정 범위를 스캔한 것이다.
- 인덱스 전체 스캔(Index Full Scan)
- 인덱스에서 검색되는 키가 많은 경우에, Leaf Block의 처음부터 끝까지 전체를 읽어 들인다.
- Table Full Scan 시에 High Watermark란?
- Table Full Scan은 테이블의 데이터를 모두 읽은 것을 의미한다.
- 테이블을 읽을 때, High Watermark 이하까지만 Table을 Full Scan한다.
- High Watermark는 테이블에 데이터가 저장된 블록에서 최상위 위치를 의미하고, 데이터가 삭제되면 High Watermark가 변경된다.
파티션 인덱스(Partition Index)
구분 | 주요 내용 |
---|
Global Index | 여러 개의 파티션에서 하나의 인덱스를 사용한다. |
Local Index | 해당 파티션 별로 각자의 인덱스를 사용한다. |
Prefixed Index | 파티션 키와 인덱스 키가 동일하다. |
Non Prefixed Index | 파티션 키와 인덱스 키가 다르다. |
이 게시물은 "SQL 개발자 이론서+기출문제(이기적)"을 참고하여 작성되었습니다. :)