본문 바로가기
Database

오라클 인덱스란 무엇인가?

by 굿센스굿 2024. 12. 3.
반응형

 


1. 오라클 인덱스란?

오라클 데이터베이스에서 **인덱스(Index)**는 테이블의 데이터를 효율적으로 조회하기 위한 데이터 구조입니다.
인덱스는 책의 목차와 비슷한 역할을 하며, 테이블에 저장된 데이터를 직접 검색하는 대신 인덱스를 활용해 데이터를 빠르게 찾을 수 있도록 돕습니다.
특히 대규모 데이터베이스 환경에서 쿼리 성능을 크게 향상시킬 수 있는 중요한 도구입니다.


2. 인덱스의 기본 동작 원리

테이블에 인덱스를 생성하면, 오라클은 내부적으로 인덱스 엔트리를 생성하여 테이블의 특정 열(Column)에 대한 정렬된 정보를 저장합니다.
이는 쿼리 실행 시 조건에 맞는 데이터를 빠르게 찾을 수 있도록 도와줍니다.

예시: 인덱스 없는 데이터 검색

  • 테이블 EMPLOYEES에서 이름이 홍길동인 직원을 찾는 쿼리:
    SELECT * 
    FROM EMPLOYEES
    WHERE NAME = '홍길동';
    
  • 인덱스가 없을 경우, 오라클은 테이블의 모든 행을 처음부터 끝까지 검사합니다. 이를 Full Table Scan이라고 합니다.

예시: 인덱스가 있는 데이터 검색

  • 동일한 쿼리에서 NAME 열에 인덱스가 있다면:
    • 오라클은 인덱스를 조회해 홍길동의 위치를 빠르게 찾고, 해당 데이터를 테이블에서 바로 가져옵니다.
    • 이를 Index Range Scan이라고 합니다.

3. 인덱스의 주요 종류

오라클에서 지원하는 주요 인덱스 유형은 다음과 같습니다:

1) B-Tree 인덱스

  • 가장 일반적인 인덱스 유형으로, 균형 이진 트리(Balanced Tree) 구조를 사용합니다.
  • 데이터가 정렬된 상태로 저장되어 검색, 삽입, 삭제가 효율적입니다.
  • 사용 사례: 검색 조건에 = 또는 범위 연산자(>, <, BETWEEN)가 포함된 경우.

2) 비트맵 인덱스(Bitmap Index)

  • 각 값에 대해 비트맵(0과 1로 구성된 배열)을 사용하여 데이터를 저장합니다.
  • 값의 종류가 적고 중복이 많은 경우(예: 성별, 상태값)에 적합합니다.
  • 사용 사례: 대규모 데이터의 OLAP(Online Analytical Processing) 환경.

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

  • 컬럼 값에 특정 함수를 적용한 결과에 대해 인덱스를 생성합니다.
  • 사용 사례: UPPER(NAME) 또는 TRUNC(DATE)와 같이 함수가 포함된 조건.

4) 도메인 인덱스(Domain Index)

  • 사용자가 정의한 커스텀 인덱스로, 특정 애플리케이션 요구사항에 맞게 설계됩니다.
  • 사용 사례: 텍스트 검색, 공간 데이터 검색.

4. 인덱스 생성 및 관리

인덱스 생성

인덱스는 CREATE INDEX 명령어를 사용해 생성합니다.

CREATE INDEX idx_employees_name 
ON EMPLOYEES(NAME);
  • 설명: EMPLOYEES 테이블의 NAME 컬럼에 대해 B-Tree 인덱스를 생성합니다.

복합 인덱스 생성

두 개 이상의 컬럼을 조합한 인덱스도 생성할 수 있습니다.

CREATE INDEX idx_employees_dept_job 
ON EMPLOYEES(DEPARTMENT_ID, JOB_ID);
  • 설명: DEPARTMENT_ID와 JOB_ID를 조합한 복합 인덱스를 생성합니다.

5. 인덱스의 장점과 단점

장점

  1. 검색 속도 향상
    인덱스를 활용하면 테이블의 모든 데이터를 스캔하지 않고도 조건에 맞는 데이터를 빠르게 조회할 수 있습니다.
  2. 정렬 작업 최소화
    ORDER BY 또는 GROUP BY를 포함한 쿼리에서 인덱스가 정렬을 도와 성능을 개선합니다.

단점

  1. 추가적인 저장 공간 필요
    인덱스는 별도의 데이터 구조로 저장되므로 디스크 공간이 추가로 필요합니다.
  2. 데이터 수정 성능 저하
    INSERT, UPDATE, DELETE 작업 시 인덱스도 갱신되므로 성능이 저하될 수 있습니다.
  3. 잘못된 인덱스 사용
    불필요하거나 비효율적인 인덱스는 오히려 쿼리 성능을 떨어뜨릴 수 있습니다.

6. 인덱스 활용 사례

예제 1: 단일 컬럼 인덱스

SELECT * 
FROM EMPLOYEES
WHERE NAME = '홍길동';
  • 활용 인덱스: NAME 컬럼에 생성된 B-Tree 인덱스.

예제 2: 복합 인덱스

SELECT * 
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 10 AND JOB_ID = 'SALES';
  • 활용 인덱스: DEPARTMENT_ID, JOB_ID에 생성된 복합 인덱스.

예제 3: 함수 기반 인덱스

SELECT * 
FROM EMPLOYEES
WHERE UPPER(NAME) = '홍길동';
  • 활용 인덱스: UPPER(NAME)에 대한 함수 기반 인덱스.

7. 인덱스 사용 시 유의사항

  1. 조건부 사용
    데이터가 너무 적은 테이블에는 인덱스 사용이 오히려 비효율적일 수 있습니다.
    예를 들어, 100건 이하의 데이터는 Full Table Scan이 더 빠를 수 있습니다.
  2. 인덱스 힌트 사용
    오라클 옵티마이저가 인덱스를 잘못 선택할 경우, 힌트를 사용해 인덱스를 강제로 적용할 수 있습니다.
  3. SELECT /*+ INDEX(EMPLOYEES idx_employees_name) */ * FROM EMPLOYEES WHERE NAME = '홍길동';
  4. 정기적인 모니터링 및 관리
    사용되지 않는 인덱스를 제거하고, 필요한 인덱스만 유지해야 성능을 최적화할 수 있습니다.

8. 마치며

오라클 인덱스는 데이터베이스 성능 최적화의 핵심 도구입니다.
인덱스의 종류와 동작 원리를 이해하고 적절히 활용하면 대규모 데이터 환경에서도 효율적인 검색과 처리가 가능합니다.
다만, 모든 쿼리에 인덱스가 적합한 것은 아니므로 데이터 특성과 쿼리 패턴에 따라 신중하게 설계하고 관리해야 합니다.
위 내용을 참고해 실무에서 성능 향상에 기여하는 인덱스 전략을 수립해보세요.

반응형