오라클 인덱스 종류
B-tree 인덱스 (Balanced Tree Index)
menu_book 특징:
- 오라클에서 가장 일반적으로 사용되는 인덱스
- Balanced Tree의 약자로, 트리의 모든 리프 노드(실제 데이터 주소를 담고 있는 노드)까지의 거리가 일정하게 유지되는 균형 잡힌 트리 구조.
- 인덱스 키와 해당 데이터가 위치한 ROWID를 저장하며, 리프 노드들은 서로 양방향으로 연결되어 있어 순차적 탐색이 용이.
- 단일 컬럼뿐만 아니라 여러 컬럼을 묶은 복합(Composite) 인덱스로도 생성 가능.
장점:
- 빠른 탐색 속도: 트리 구조 덕분에 대량의 데이터에서도 원하는 데이터를 빠르게 찾을 수 있습니다.
- 다양한 연산 지원: WHERE 절의 =, >, <, BETWEEN 등 광범위한 연산에 효과적입니다.
- 높은 범용성: 대부분의 쿼리 환경에 적합하여 가장 널리 사용됩니다.
- 높은 동시성: 여러 사용자가 동시에 인덱스에 접근해도 성능 저하가 적습니다.
단점:
- 공간 차지: 물리적인 저장 공간을 필요.
- 테이블에 삽입, 삭제, 갱신이 빈번할수록 인덱스 관리를 위한 오버헤드가 발생.
- DML 작업 부하: INSERT, UPDATE, DELETE와 같은 DML(Data Manipulation Language) 작업 시 인덱스도 함께 갱신해야 하므로 성능이 저하 발생.
비트맵 인덱스 (Bitmap Index)
menu_book 특징:
- 인덱스 키에 해당하는 로우(row)들을 비트맵(bitmap)으로 저장.
- 각 키 값에 대해 비트 배열을 생성하며, 해당 키를 가진 로우의 위치에 1을, 없는 위치에 0을 표시.
- 카디널리티(컬럼의 고유한 값의 수)가 낮은 컬럼(예: 성별, 지역, 상태 코드)에 매우 효과적.
장점
- 뛰어난 압축률: B-tree 인덱스에 비해 훨씬 적은 공간을 차지.
- 빠른 OR 및 AND 연산: 여러 비트맵 인덱스를 결합하여 복잡한 WHERE 절을 매우 빠르게 처리할 수 있습니다. (예: WHERE gender='M' AND region='Seoul')
- 데이터 웨어하우스(DW) 환경에 최적: 읽기 중심의 대용량 데이터 환경에서 탁월한 성능 발휘.
단점
- DML 작업 성능 저하: 데이터가 변경될 때 비트맵 전체를 다시 생성해야 할 수 있어 동시성 문제가 발생하며, DML 작업이 빈번한 OLTP(Online Transaction Processing) 환경에는 부적합.
- 낮은 카디널리티 컬럼에 한정: 고유한 값이 많은 컬럼에 사용하면 오히려 B-tree보다 성능이 떨어짐.
함수 기반 인덱스 (Function-Based Index)
menu_book 특징:
- 테이블 컬럼의 값이 아닌 함수 또는 표현식의 결과를 인덱스 키로 사용
- WHERE 절에 함수를 사용해야 하는 쿼리에서 성능 향상. (예: WHERE UPPER(column) = 'VALUE')
- 함수 기반 인덱스는 B-tree 또는 비트맵 인덱스 형태로 생성될 수 있음.
장점
- 유연한 쿼리 최적화: 함수가 적용된 쿼리에서 인덱스를 활용할 수 있어, 그렇지 않은 경우의 테이블 전체 스캔을 방지합니다.
- 쿼리 성능 향상: 특히 대소문자 구분 없이 검색하거나, 데이터 타입 변환이 필요한 경우에 유용합니다.
단점
- 함수 변경 시 인덱스 재구성 필요: 인덱스 생성에 사용된 함수나 표현식이 변경되면 인덱스를 다시 만들어야 합니다.
- 가변성: 함수 결과값이 항상 동일해야 효과적이므로, 휘발성 함수(volatile function)에는 적합하지 않습니다.
유니크 인덱스 (Unique Index)
menu_book 특징:
- 인덱스 키 값이 항상 고유함을 보장하는 인덱스
- 테이블에 UNIQUE 제약조건 또는 PRIMARY KEY 제약조건을 걸면 자동으로 생성
- B-tree 인덱스의 한 종류
장점
- 데이터 무결성 보장: 중복된 데이터가 삽입되는 것을 방지
- 매우 빠른 탐색: 고유한 값을 찾기 때문에 B-tree 인덱스보다 더 빠르게 탐색
단점
- DML 작업에 대한 오버헤드가 발생
- 고유성을 보장해야 하므로 중복 값 삽입 시 에러 발생