인덱스 분류
- 논리적
- 단일 열 또는 연결된 인덱스
- 고유 또는 비고유 인덱스
- 함수 기반 인덱스
- 도메인 인덱스
- 물리적
- 파티션된 또는 파티션 되지 않은 인덱스
- B 트리
- 일반 또는 역방향 키
- 비트맵
B 트리 인덱스
- B 트리 인덱스 구조
- 인덱스의 맨 위에는 루트가 있으며 루트는 인덱스의 다음 레벨을 가리키는 항목을 포함하고 다음 레벨에는 분기 블록이 있으며 이 블록은 인덱스의 다음 레벨에 있는 블록을 차례로 가리키며 마지막으로 최하위 레벨에는 최하위 노드가 있꼬 이 노드는 테이블의 행을 가리키는 인덱스 항목을 포함함
- 인덱스 최하위 항목 형식
- 항목 헤더는 열 수 및 잠금 정보를 저장함
- 키 열의 길이 및 값 쌍은 키 열의 크기 및 열의 값을 정의함
- 행의 ROWID 는 키 값을 포함함
- 인덱스 최하위 항목 특성
- 인덱스가 압축되지 않은 경우 여러 행이 동일한 키 값을 갖고 있을 때는 키 값이 반복됨
- 모든 키 열의 값이 NULL 인 행에 해당하는 인덱스 항목은 없음
따라서 NULL 을 지정하는 WHERE 절은 항상 전체 테이블 스캔을 수행함 - 모든 행이 동일한 세그먼트에 속해 있기 때문에 제한된 ROWID 를 사용하여 테이블의 행을 가리킴
- 인덱스에 대한 DML 작업효과
- 삽입 작업을 수행하면 하나의 인덱스 항목이 해당 블록에 삽입됨
- 행을 삭제하면 해당 인덱스 항목이 논리적으로만 삭제되며 삭제된 행에서 사용하던 공간은 해당 블록의 모든 항목을 삭제할 때까지 새 항목용으로 사용할 수 없음
- 키 열을 갱신하면 논리적으로 삭제되고 인덱스에 삽입되는데 PCTFREE 설정은 생성 시를 제외하고는 인덱스에 영향을 미치지 않으므로 PCTEREE 에서 지정한 것보다 공간이 적더라도 새 항목을 인덱스 블록에 추가할 수 있음
비트맵 인덱스
- 비트맵 인덱스가 B 트리 인덱스보다 유리함
- 테이블에 수 백만 개의 행이 있고 키 열에 낮은 기수가 있을 때, 즉 해당 열의 구분 값이 극소수일 경우
- 질의가 OR 연산자를 포함하는 여러 WHERE 조건을 조합하여 사용할 경우
- 읽기 전용 또는 키 열에 대한 갱신 작업이 저조할 경우
- 비트맵 인덱스 구조
- 비트맵 인덱스도 B 트리와 같이 구성하지만 최하위 노드는 ROWIDS 목록 대신 각 키 값에 대한 비트맵을 저장함
비트맵 내의 각 비트는 가능한 ROWID 와 대응하며 비트가 설정되어 있으면 해당 ROWID 가 있는 행이 키 값을 포함하고 있음을 의미함
- 비트맵 인덱스도 B 트리와 같이 구성하지만 최하위 노드는 ROWIDS 목록 대신 각 키 값에 대한 비트맵을 저장함
B 트리 인덱스와 비트맵 인덱스 비교
B 트리 | 비트맵 |
높은 기수 열에 적합함 | 낮은 기수 열에 적합함 |
키 갱신 시 상대적으로 적은 비용이 듬 | 키 열 갱신 시 매우 많은 비용이 듬 |
OR 술어를 사용하는 질의에서 비효과적임 | OR 술어를 사용하는 질의에서 효과적임 |
OLTP에 유용함 | 데이터 웨어하우징에 유용함 |
인덱스 생성 : 지침
- 질의와 DML 요구 간의 균형
- 별도의 테이블 스페이스에 배치
- 일정한 익스턴트 크기 사용 : 테이블 스페이스에 대한 다섯 개의 블록 또는 MINIMUM EXTENT 크기의 배수
- 큰 인덱스 생성 시 NOLOGGING 고려
- 일반적으로 INITRANS 는 해당 테이블에서보다 인덱스에서 더 높음
인덱스 재구축
- 인덱스를 다른 테이블 스페이스로 이동
- 삭제된 항목을 제거하여 공간 활용 향상
온라인으로 인덱스 재구축
- 인덱스 재구축은 최소의 테이블 잠금으로 수행될 수 잇음
- 일부 제한 사항이 적용됨
- Oracle8i 이전에는 인덱스를 생성 또는 재구축할 경우 테이블을 잠궈야 했고 동시 DML 작업을 할 수 없었음
- Oracle9i 부터 인덱스를 생성 또는 재생성 하면서 기본 테이블에 대한 동시 작업을 수행할 수 있지만 이러한 절차 중에는 큰 DML 작업을 수행하지 않는 것이 좋음
인덱스 정보 얻기
- DBA_INDEXES : 인덱스 정보 제공
- DBA_IND_COLUMNS : 인덱스화된 열의 정보 제공
- V$OBJECT_USAGE : 인덱스 사용에 대한 정보 제공
'Oracle' 카테고리의 다른 글
사용자 관리 (1) | 2024.02.27 |
---|---|
암호 보안 및 자원 관리 (0) | 2024.02.27 |
테이블 관리 (0) | 2024.02.27 |
언두 데이터 관리 (1) | 2024.02.27 |
저장 영역 구조 및 관계 (0) | 2024.02.27 |