본문 바로가기
Database/Oracle

[ORACLE] IND 인덱스 완전 정복 : 개념부터 실무 활용까지

by Papa Martino V 2025. 7. 29.
728x90

IND 인덱스 완전 정복 : 개념부터 실무 활용까지
[ORACLE] IND

ORACLE 데이터베이스를 효율적으로 운영하기 위한 핵심 전략 중 하나는 인덱스(IND, Index)의 적절한 설계와 활용입니다. 이번 글에서는 ORACLE의 인덱스(IND)에 대해 실무에서 바로 활용할 수 있는 내용 위주로, 이론부터 실무적 튜닝까지 폭넓게 설명합니다.

IND(Index)란 무엇인가?

인덱스(Index, IND)는 ORACLE 데이터베이스에서 데이터를 보다 빠르게 조회할 수 있도록 돕는 객체입니다. 마치 책의 목차처럼, 특정 값을 빠르게 찾을 수 있는 경로를 제공합니다. 인덱스를 사용하면 전체 테이블을 스캔하는 Full Table Scan을 피할 수 있어 성능을 획기적으로 개선할 수 있습니다.

ORACLE에서 사용 가능한 주요 인덱스 종류

인덱스 종류 특징 적용 예시
B-Tree Index 가장 일반적인 인덱스. WHERE 절의 "=" 또는 ">" 같은 조건에 유리함 고객번호, 사번 등 고유 키 검색
Bitmap Index 데이터 분포가 낮은 컬럼에 적합, 공간 효율 높음 성별, 국가 코드, 가입 상태
Function-Based Index 함수를 적용한 컬럼 인덱싱. NVL, UPPER 등의 함수와 함께 사용 UPPER(이름), NVL(우편번호, '00000')
Composite Index 여러 컬럼을 묶어 하나의 인덱스로 구성 고객 ID + 주문일자 조합
Unique Index 중복을 허용하지 않는 인덱스 주민등록번호, 이메일 주소

인덱스의 실무 활용 전략

1. 선택도 기반 설계

인덱스를 만들기 전 반드시 해당 컬럼의 선택도(Selectivity)를 분석해야 합니다. 선택도가 높은 컬럼(데이터가 다양하게 분포된 컬럼)은 B-Tree 인덱스에 적합하고, 선택도가 낮은 컬럼은 Bitmap 인덱스가 더 유리합니다.

2. 실행 계획 확인 (EXPLAIN PLAN)

인덱스가 실제로 사용되는지 확인하려면 EXPLAIN PLAN 또는 AUTOTRACE를 사용해 실행 계획을 확인해야 합니다. 기대와 달리 인덱스가 무시되고 Full Table Scan이 수행되는 경우도 있기 때문입니다.

3. 힌트 사용

특정 쿼리에서 강제로 인덱스를 사용하도록 하고 싶을 때는 INDEX 힌트를 활용할 수 있습니다. 예:

SELECT /*+ INDEX(emp emp_idx1) */ * FROM emp WHERE empno = 1001;

4. 인덱스 리빌드와 모니터링

시간이 지나면 인덱스는 조각화(Fragmentation)되며 성능 저하의 원인이 됩니다. 주기적으로 아래 명령어를 통해 리빌드하거나 필요 없는 인덱스를 삭제해야 합니다.

ALTER INDEX emp_idx1 REBUILD;

성능 향상을 위한 인덱스 활용 예시

대용량 로그 테이블에서 특정 기간에 생성된 데이터만 조회하는 경우, 다음과 같은 Function-Based Index를 사용하면 성능을 개선할 수 있습니다.


CREATE INDEX log_created_idx 
ON log_table (TRUNC(created_at));

SELECT * FROM log_table 
WHERE TRUNC(created_at) = TO_DATE('2025-07-29', 'YYYY-MM-DD');
    

인덱스 관리 실수 TOP 5

  • 모든 컬럼에 인덱스를 생성하는 것
  • 데이터가 자주 변경되는 컬럼에 Bitmap 인덱스 사용
  • 인덱스 생성 후 사용 여부를 확인하지 않음
  • 복합 인덱스의 순서 고려 없이 생성
  • 유지 관리 없이 인덱스만 누적됨

요약 비교표

기준 B-Tree Index Bitmap Index Function-Based Index
적용 대상 고유값이 많은 컬럼 고유값이 적은 컬럼 함수가 사용되는 컬럼
성능 빠름 (단일 검색) 빠름 (여러 조건 OR) 조건 포함시 향상
단점 공간 소모 큼 DML 성능 저하 함수 미사용 시 무용지물

결론

ORACLE의 인덱스(IND)는 단순한 성능 도구를 넘어서, 시스템의 전체적인 안정성과 응답 속도에 직결되는 중요한 요소입니다. 적절한 분석과 설계를 통해 IND를 활용한다면 쿼리 성능을 극대화하고, 비용을 절감하는 효과도 기대할 수 있습니다. 다양한 인덱스 타입과 적용 전략을 정확히 이해하고, 실무에 맞게 커스터마이징하는 능력이 데이터베이스 전문가의 핵심 역량입니다.

출처:

  • Oracle® Database SQL Tuning Guide 21c
  • Oracle Database Performance Tuning Tips & Techniques – Richard Niemiec
  • https://docs.oracle.com/en/database/oracle/oracle-database/21/tgsql/indexes.html
728x90