메뉴 여닫기
개인 메뉴 토글
로그인하지 않음
만약 지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

오라클 인덱스 종류

B-tree 인덱스 (Balanced Tree Index)

menu_book 특징:
  • 오라클에서 가장 일반적으로 사용되는 인덱스
  • Balanced Tree의 약자로, 트리의 모든 리프 노드(실제 데이터 주소를 담고 있는 노드)까지의 거리가 일정하게 유지되는 균형 잡힌 트리 구조.
  • 인덱스 키와 해당 데이터가 위치한 ROWID를 저장하며, 리프 노드들은 서로 양방향으로 연결되어 있어 순차적 탐색이 용이.
  • 단일 컬럼뿐만 아니라 여러 컬럼을 묶은 복합(Composite) 인덱스로도 생성 가능.

장점:

  1. 빠른 탐색 속도: 트리 구조 덕분에 대량의 데이터에서도 원하는 데이터를 빠르게 찾을 수 있습니다.
  2. 다양한 연산 지원: WHERE 절의 =, >, <, BETWEEN 등 광범위한 연산에 효과적입니다.
  3. 높은 범용성: 대부분의 쿼리 환경에 적합하여 가장 널리 사용됩니다.
  4. 높은 동시성: 여러 사용자가 동시에 인덱스에 접근해도 성능 저하가 적습니다.

단점:

  1. 공간 차지: 물리적인 저장 공간을 필요.
    1. 테이블에 삽입, 삭제, 갱신이 빈번할수록 인덱스 관리를 위한 오버헤드가 발생.
  2. DML 작업 부하: INSERT, UPDATE, DELETE와 같은 DML(Data Manipulation Language) 작업 시 인덱스도 함께 갱신해야 하므로 성능이 저하 발생.

비트맵 인덱스 (Bitmap Index)

menu_book 특징:
  • 인덱스 키에 해당하는 로우(row)들을 비트맵(bitmap)으로 저장.
  • 각 키 값에 대해 비트 배열을 생성하며, 해당 키를 가진 로우의 위치에 1을, 없는 위치에 0을 표시.
  • 카디널리티(컬럼의 고유한 값의 수)가 낮은 컬럼(예: 성별, 지역, 상태 코드)에 매우 효과적.


장점

  1. 뛰어난 압축률: B-tree 인덱스에 비해 훨씬 적은 공간을 차지.
  2. 빠른 OR 및 AND 연산: 여러 비트맵 인덱스를 결합하여 복잡한 WHERE 절을 매우 빠르게 처리할 수 있습니다. (예: WHERE gender='M' AND region='Seoul')
  3. 데이터 웨어하우스(DW) 환경에 최적: 읽기 중심의 대용량 데이터 환경에서 탁월한 성능 발휘.

단점

  1. DML 작업 성능 저하: 데이터가 변경될 때 비트맵 전체를 다시 생성해야 할 수 있어 동시성 문제가 발생하며, DML 작업이 빈번한 OLTP(Online Transaction Processing) 환경에는 부적합.
  2. 낮은 카디널리티 컬럼에 한정: 고유한 값이 많은 컬럼에 사용하면 오히려 B-tree보다 성능이 떨어짐.

함수 기반 인덱스 (Function-Based Index)

menu_book 특징:
  • 테이블 컬럼의 값이 아닌 함수 또는 표현식의 결과를 인덱스 키로 사용
  • WHERE 절에 함수를 사용해야 하는 쿼리에서 성능 향상. (예: WHERE UPPER(column) = 'VALUE')
  • 함수 기반 인덱스는 B-tree 또는 비트맵 인덱스 형태로 생성될 수 있음.

장점

  1. 유연한 쿼리 최적화: 함수가 적용된 쿼리에서 인덱스를 활용할 수 있어, 그렇지 않은 경우의 테이블 전체 스캔을 방지합니다.
  2. 쿼리 성능 향상: 특히 대소문자 구분 없이 검색하거나, 데이터 타입 변환이 필요한 경우에 유용합니다.

단점

  1. 함수 변경 시 인덱스 재구성 필요: 인덱스 생성에 사용된 함수나 표현식이 변경되면 인덱스를 다시 만들어야 합니다.
  2. 가변성: 함수 결과값이 항상 동일해야 효과적이므로, 휘발성 함수(volatile function)에는 적합하지 않습니다.

유니크 인덱스 (Unique Index)

menu_book 특징:
  • 인덱스 키 값이 항상 고유함을 보장하는 인덱스
  • 테이블에 UNIQUE 제약조건 또는 PRIMARY KEY 제약조건을 걸면 자동으로 생성
  • B-tree 인덱스의 한 종류

장점

  1. 데이터 무결성 보장: 중복된 데이터가 삽입되는 것을 방지
  2. 매우 빠른 탐색: 고유한 값을 찾기 때문에 B-tree 인덱스보다 더 빠르게 탐색

단점

  1. DML 작업에 대한 오버헤드가 발생
  2. 고유성을 보장해야 하므로 중복 값 삽입 시 에러 발생